1
- use crate :: argconv:: { ArcFFI , BoxFFI } ;
1
+ use crate :: argconv:: { ArcFFI , BoxFFI , CassExclusiveConstPtr , CassExclusiveMutPtr , CassSharedPtr } ;
2
2
use crate :: cass_error:: CassError ;
3
3
use crate :: cass_types:: CassConsistency ;
4
4
use crate :: cass_types:: { make_batch_type, CassBatchType } ;
@@ -28,7 +28,7 @@ pub struct CassBatchState {
28
28
}
29
29
30
30
#[ no_mangle]
31
- pub unsafe extern "C" fn cass_batch_new ( type_ : CassBatchType ) -> * mut CassBatch {
31
+ pub unsafe extern "C" fn cass_batch_new ( type_ : CassBatchType ) -> CassExclusiveMutPtr < CassBatch > {
32
32
if let Some ( batch_type) = make_batch_type ( type_) {
33
33
BoxFFI :: into_ptr ( Box :: new ( CassBatch {
34
34
state : Arc :: new ( CassBatchState {
@@ -39,21 +39,21 @@ pub unsafe extern "C" fn cass_batch_new(type_: CassBatchType) -> *mut CassBatch
39
39
exec_profile : None ,
40
40
} ) )
41
41
} else {
42
- std :: ptr :: null_mut ( )
42
+ BoxFFI :: null_mut ( )
43
43
}
44
44
}
45
45
46
46
#[ no_mangle]
47
- pub unsafe extern "C" fn cass_batch_free ( batch : * mut CassBatch ) {
47
+ pub unsafe extern "C" fn cass_batch_free ( batch : CassExclusiveMutPtr < CassBatch > ) {
48
48
BoxFFI :: free ( batch) ;
49
49
}
50
50
51
51
#[ no_mangle]
52
52
pub unsafe extern "C" fn cass_batch_set_consistency (
53
- batch : * mut CassBatch ,
53
+ mut batch : CassExclusiveMutPtr < CassBatch > ,
54
54
consistency : CassConsistency ,
55
55
) -> CassError {
56
- let batch = BoxFFI :: as_mut_ref ( batch) ;
56
+ let batch = BoxFFI :: as_mut_ref ( & mut batch) . unwrap ( ) ;
57
57
let consistency = match consistency. try_into ( ) . ok ( ) {
58
58
Some ( c) => c,
59
59
None => return CassError :: CASS_ERROR_LIB_BAD_PARAMS ,
@@ -67,10 +67,10 @@ pub unsafe extern "C" fn cass_batch_set_consistency(
67
67
68
68
#[ no_mangle]
69
69
pub unsafe extern "C" fn cass_batch_set_serial_consistency (
70
- batch : * mut CassBatch ,
70
+ mut batch : CassExclusiveMutPtr < CassBatch > ,
71
71
serial_consistency : CassConsistency ,
72
72
) -> CassError {
73
- let batch = BoxFFI :: as_mut_ref ( batch) ;
73
+ let batch = BoxFFI :: as_mut_ref ( & mut batch) . unwrap ( ) ;
74
74
let serial_consistency = match serial_consistency. try_into ( ) . ok ( ) {
75
75
Some ( c) => c,
76
76
None => return CassError :: CASS_ERROR_LIB_BAD_PARAMS ,
@@ -84,13 +84,13 @@ pub unsafe extern "C" fn cass_batch_set_serial_consistency(
84
84
85
85
#[ no_mangle]
86
86
pub unsafe extern "C" fn cass_batch_set_retry_policy (
87
- batch : * mut CassBatch ,
88
- retry_policy : * const CassRetryPolicy ,
87
+ mut batch : CassExclusiveMutPtr < CassBatch > ,
88
+ retry_policy : CassSharedPtr < CassRetryPolicy > ,
89
89
) -> CassError {
90
- let batch = BoxFFI :: as_mut_ref ( batch) ;
90
+ let batch = BoxFFI :: as_mut_ref ( & mut batch) . unwrap ( ) ;
91
91
92
92
let maybe_arced_retry_policy: Option < Arc < dyn scylla:: retry_policy:: RetryPolicy > > =
93
- ArcFFI :: as_maybe_ref ( retry_policy) . map ( |policy| match policy {
93
+ ArcFFI :: as_ref ( & retry_policy) . map ( |policy| match policy {
94
94
CassRetryPolicy :: DefaultRetryPolicy ( default) => {
95
95
default. clone ( ) as Arc < dyn scylla:: retry_policy:: RetryPolicy >
96
96
}
@@ -107,10 +107,10 @@ pub unsafe extern "C" fn cass_batch_set_retry_policy(
107
107
108
108
#[ no_mangle]
109
109
pub unsafe extern "C" fn cass_batch_set_timestamp (
110
- batch : * mut CassBatch ,
110
+ mut batch : CassExclusiveMutPtr < CassBatch > ,
111
111
timestamp : cass_int64_t ,
112
112
) -> CassError {
113
- let batch = BoxFFI :: as_mut_ref ( batch) ;
113
+ let batch = BoxFFI :: as_mut_ref ( & mut batch) . unwrap ( ) ;
114
114
115
115
Arc :: make_mut ( & mut batch. state )
116
116
. batch
@@ -121,21 +121,21 @@ pub unsafe extern "C" fn cass_batch_set_timestamp(
121
121
122
122
#[ no_mangle]
123
123
pub unsafe extern "C" fn cass_batch_set_request_timeout (
124
- batch : * mut CassBatch ,
124
+ mut batch : CassExclusiveMutPtr < CassBatch > ,
125
125
timeout_ms : cass_uint64_t ,
126
126
) -> CassError {
127
- let batch = BoxFFI :: as_mut_ref ( batch) ;
127
+ let batch = BoxFFI :: as_mut_ref ( & mut batch) . unwrap ( ) ;
128
128
batch. batch_request_timeout_ms = Some ( timeout_ms) ;
129
129
130
130
CassError :: CASS_OK
131
131
}
132
132
133
133
#[ no_mangle]
134
134
pub unsafe extern "C" fn cass_batch_set_is_idempotent (
135
- batch : * mut CassBatch ,
135
+ mut batch : CassExclusiveMutPtr < CassBatch > ,
136
136
is_idempotent : cass_bool_t ,
137
137
) -> CassError {
138
- let batch = BoxFFI :: as_mut_ref ( batch) ;
138
+ let batch = BoxFFI :: as_mut_ref ( & mut batch) . unwrap ( ) ;
139
139
Arc :: make_mut ( & mut batch. state )
140
140
. batch
141
141
. set_is_idempotent ( is_idempotent != 0 ) ;
@@ -145,10 +145,10 @@ pub unsafe extern "C" fn cass_batch_set_is_idempotent(
145
145
146
146
#[ no_mangle]
147
147
pub unsafe extern "C" fn cass_batch_set_tracing (
148
- batch : * mut CassBatch ,
148
+ mut batch : CassExclusiveMutPtr < CassBatch > ,
149
149
enabled : cass_bool_t ,
150
150
) -> CassError {
151
- let batch = BoxFFI :: as_mut_ref ( batch) ;
151
+ let batch = BoxFFI :: as_mut_ref ( & mut batch) . unwrap ( ) ;
152
152
Arc :: make_mut ( & mut batch. state )
153
153
. batch
154
154
. set_tracing ( enabled != 0 ) ;
@@ -158,12 +158,12 @@ pub unsafe extern "C" fn cass_batch_set_tracing(
158
158
159
159
#[ no_mangle]
160
160
pub unsafe extern "C" fn cass_batch_add_statement (
161
- batch : * mut CassBatch ,
162
- statement : * const CassStatement ,
161
+ mut batch : CassExclusiveMutPtr < CassBatch > ,
162
+ statement : CassExclusiveConstPtr < CassStatement > ,
163
163
) -> CassError {
164
- let batch = BoxFFI :: as_mut_ref ( batch) ;
164
+ let batch = BoxFFI :: as_mut_ref ( & mut batch) . unwrap ( ) ;
165
165
let state = Arc :: make_mut ( & mut batch. state ) ;
166
- let statement = BoxFFI :: as_ref ( statement) ;
166
+ let statement = BoxFFI :: as_ref ( & statement) . unwrap ( ) ;
167
167
168
168
match & statement. statement {
169
169
Statement :: Simple ( q) => state. batch . append_statement ( q. query . clone ( ) ) ,
0 commit comments