17
17
#![ allow( clippy:: not_unsafe_ptr_arg_deref) ]
18
18
19
19
use crate :: types;
20
- use types:: { Kind , Status , Buffer } ;
20
+ use types:: { Buffer , Kind , Status } ;
21
21
22
+ use polyglot_rs:: Decoder as PolyglotDecoder ;
22
23
use std:: ffi:: { c_char, CString } ;
23
24
use std:: io:: Cursor ;
24
- use polyglot_rs:: { Decoder as PolyglotDecoder } ;
25
25
26
26
#[ repr( C ) ]
27
27
#[ derive( Debug ) ]
@@ -30,7 +30,11 @@ pub struct Decoder {
30
30
}
31
31
32
32
#[ no_mangle]
33
- pub extern "C" fn polyglot_new_decoder ( status : * mut Status , buffer_pointer : * mut u8 , buffer_size : u32 ) -> * mut Decoder {
33
+ pub extern "C" fn polyglot_new_decoder (
34
+ status : * mut Status ,
35
+ buffer_pointer : * mut u8 ,
36
+ buffer_size : u32 ,
37
+ ) -> * mut Decoder {
34
38
Status :: check_not_null ( status) ;
35
39
36
40
if buffer_pointer. is_null ( ) {
@@ -68,27 +72,30 @@ pub extern "C" fn polyglot_decode_none(status: *mut Status, decoder: *mut Decode
68
72
}
69
73
}
70
74
71
- unsafe {
72
- ( * decoder) . cursor . decode_none ( )
73
- }
75
+ unsafe { ( * decoder) . cursor . decode_none ( ) }
74
76
}
75
77
76
78
#[ no_mangle]
77
- pub extern "C" fn polyglot_decode_array ( status : * mut Status , decoder : * mut Decoder , array_kind : Kind ) -> u32 {
79
+ pub extern "C" fn polyglot_decode_array (
80
+ status : * mut Status ,
81
+ decoder : * mut Decoder ,
82
+ array_kind : Kind ,
83
+ ) -> u32 {
78
84
Status :: check_not_null ( status) ;
79
85
80
86
if decoder. is_null ( ) {
81
87
unsafe {
82
88
* status = Status :: NullPointer ;
83
89
}
90
+ return 0 ;
84
91
}
85
92
86
93
unsafe {
87
94
match ( * decoder) . cursor . decode_array ( array_kind. into ( ) ) {
88
- Ok ( size ) => {
95
+ Ok ( size) => {
89
96
* status = Status :: Pass ;
90
97
size as u32
91
- } ,
98
+ }
92
99
Err ( _) => {
93
100
* status = Status :: Fail ;
94
101
0
@@ -98,21 +105,30 @@ pub extern "C" fn polyglot_decode_array(status: *mut Status, decoder: *mut Decod
98
105
}
99
106
100
107
#[ no_mangle]
101
- pub extern "C" fn polyglot_decode_map ( status : * mut Status , decoder : * mut Decoder , key_kind : Kind , value_kind : Kind ) -> u32 {
108
+ pub extern "C" fn polyglot_decode_map (
109
+ status : * mut Status ,
110
+ decoder : * mut Decoder ,
111
+ key_kind : Kind ,
112
+ value_kind : Kind ,
113
+ ) -> u32 {
102
114
Status :: check_not_null ( status) ;
103
115
104
116
if decoder. is_null ( ) {
105
117
unsafe {
106
118
* status = Status :: NullPointer ;
107
119
}
120
+ return 0 ;
108
121
}
109
122
110
123
unsafe {
111
- match ( * decoder) . cursor . decode_map ( key_kind. into ( ) , value_kind. into ( ) ) {
112
- Ok ( size ) => {
124
+ match ( * decoder)
125
+ . cursor
126
+ . decode_map ( key_kind. into ( ) , value_kind. into ( ) )
127
+ {
128
+ Ok ( size) => {
113
129
* status = Status :: Pass ;
114
130
size as u32
115
- } ,
131
+ }
116
132
Err ( _) => {
117
133
* status = Status :: Fail ;
118
134
0
@@ -129,17 +145,18 @@ pub extern "C" fn polyglot_decode_bytes(status: *mut Status, decoder: *mut Decod
129
145
unsafe {
130
146
* status = Status :: NullPointer ;
131
147
}
148
+ return std:: ptr:: null_mut ( ) ;
132
149
}
133
150
134
151
unsafe {
135
152
match ( * decoder) . cursor . decode_bytes ( ) {
136
- Ok ( value ) => {
153
+ Ok ( value) => {
137
154
* status = Status :: Pass ;
138
155
let mut boxed_value = value. into_boxed_slice ( ) ;
139
156
let buffer = Buffer :: new_raw ( boxed_value. as_mut_ptr ( ) , boxed_value. len ( ) as u32 ) ;
140
157
std:: mem:: forget ( boxed_value) ;
141
158
buffer
142
- } ,
159
+ }
143
160
Err ( _) => {
144
161
* status = Status :: Fail ;
145
162
std:: ptr:: null_mut ( )
@@ -152,7 +169,8 @@ pub extern "C" fn polyglot_decode_bytes(status: *mut Status, decoder: *mut Decod
152
169
pub extern "C" fn polyglot_free_decode_bytes ( buffer : * mut Buffer ) {
153
170
if !buffer. is_null ( ) {
154
171
unsafe {
155
- let boxed_value = std:: slice:: from_raw_parts_mut ( ( * buffer) . data , ( * buffer) . length as usize ) ;
172
+ let boxed_value =
173
+ std:: slice:: from_raw_parts_mut ( ( * buffer) . data , ( * buffer) . length as usize ) ;
156
174
let value = boxed_value. as_mut_ptr ( ) ;
157
175
drop ( Box :: from_raw ( value) ) ;
158
176
drop ( Box :: from_raw ( buffer) ) ;
@@ -161,7 +179,10 @@ pub extern "C" fn polyglot_free_decode_bytes(buffer: *mut Buffer) {
161
179
}
162
180
163
181
#[ no_mangle]
164
- pub extern "C" fn polyglot_decode_string ( status : * mut Status , decoder : * mut Decoder ) -> * mut c_char {
182
+ pub extern "C" fn polyglot_decode_string (
183
+ status : * mut Status ,
184
+ decoder : * mut Decoder ,
185
+ ) -> * mut c_char {
165
186
Status :: check_not_null ( status) ;
166
187
167
188
if decoder. is_null ( ) {
@@ -184,7 +205,7 @@ pub extern "C" fn polyglot_decode_string(status: *mut Status, decoder: *mut Deco
184
205
std:: ptr:: null_mut ( )
185
206
}
186
207
} ;
187
- } ,
208
+ }
188
209
Err ( _) => {
189
210
* status = Status :: Fail ;
190
211
std:: ptr:: null_mut ( )
@@ -203,7 +224,7 @@ pub extern "C" fn polyglot_free_decode_string(c_string: *mut c_char) {
203
224
}
204
225
205
226
#[ no_mangle]
206
- pub extern "C" fn polyglot_decode_error ( status : * mut Status , decoder : * mut Decoder ) -> * mut c_char {
227
+ pub extern "C" fn polyglot_decode_error ( status : * mut Status , decoder : * mut Decoder ) -> * mut c_char {
207
228
Status :: check_not_null ( status) ;
208
229
209
230
if decoder. is_null ( ) {
@@ -226,7 +247,7 @@ pub extern "C" fn polyglot_decode_error(status: *mut Status, decoder: *mut Decod
226
247
std:: ptr:: null_mut ( )
227
248
}
228
249
} ;
229
- } ,
250
+ }
230
251
Err ( _) => {
231
252
* status = Status :: Fail ;
232
253
std:: ptr:: null_mut ( )
@@ -260,7 +281,7 @@ pub extern "C" fn polyglot_decode_bool(status: *mut Status, decoder: *mut Decode
260
281
Ok ( value) => {
261
282
* status = Status :: Pass ;
262
283
value
263
- } ,
284
+ }
264
285
Err ( _) => {
265
286
* status = Status :: Fail ;
266
287
false
@@ -285,7 +306,7 @@ pub extern "C" fn polyglot_decode_u8(status: *mut Status, decoder: *mut Decoder)
285
306
Ok ( value) => {
286
307
* status = Status :: Pass ;
287
308
value
288
- } ,
309
+ }
289
310
Err ( _) => {
290
311
* status = Status :: Fail ;
291
312
0
@@ -310,7 +331,7 @@ pub extern "C" fn polyglot_decode_u16(status: *mut Status, decoder: *mut Decoder
310
331
Ok ( value) => {
311
332
* status = Status :: Pass ;
312
333
value
313
- } ,
334
+ }
314
335
Err ( _) => {
315
336
* status = Status :: Fail ;
316
337
0
@@ -335,7 +356,7 @@ pub extern "C" fn polyglot_decode_u32(status: *mut Status, decoder: *mut Decoder
335
356
Ok ( value) => {
336
357
* status = Status :: Pass ;
337
358
value
338
- } ,
359
+ }
339
360
Err ( _) => {
340
361
* status = Status :: Fail ;
341
362
0
@@ -360,7 +381,7 @@ pub extern "C" fn polyglot_decode_u64(status: *mut Status, decoder: *mut Decoder
360
381
Ok ( value) => {
361
382
* status = Status :: Pass ;
362
383
value
363
- } ,
384
+ }
364
385
Err ( _) => {
365
386
* status = Status :: Fail ;
366
387
0
@@ -385,7 +406,7 @@ pub extern "C" fn polyglot_decode_i32(status: *mut Status, decoder: *mut Decoder
385
406
Ok ( value) => {
386
407
* status = Status :: Pass ;
387
408
value
388
- } ,
409
+ }
389
410
Err ( _) => {
390
411
* status = Status :: Fail ;
391
412
0
@@ -410,7 +431,7 @@ pub extern "C" fn polyglot_decode_i64(status: *mut Status, decoder: *mut Decoder
410
431
Ok ( value) => {
411
432
* status = Status :: Pass ;
412
433
value
413
- } ,
434
+ }
414
435
Err ( _) => {
415
436
* status = Status :: Fail ;
416
437
0
@@ -435,7 +456,7 @@ pub extern "C" fn polyglot_decode_f32(status: *mut Status, decoder: *mut Decoder
435
456
Ok ( value) => {
436
457
* status = Status :: Pass ;
437
458
value
438
- } ,
459
+ }
439
460
Err ( _) => {
440
461
* status = Status :: Fail ;
441
462
0.0
@@ -460,11 +481,11 @@ pub extern "C" fn polyglot_decode_f64(status: *mut Status, decoder: *mut Decoder
460
481
Ok ( value) => {
461
482
* status = Status :: Pass ;
462
483
value
463
- } ,
484
+ }
464
485
Err ( _) => {
465
486
* status = Status :: Fail ;
466
487
0.0
467
488
}
468
489
}
469
490
}
470
- }
491
+ }
0 commit comments