@@ -2,9 +2,13 @@ use num::Complex;
2
2
use std:: fmt:: Error as FmtError ;
3
3
use std:: fmt:: { Display , Formatter } ;
4
4
5
+ #[ cfg( feature = "afserde" ) ]
6
+ use serde:: { Serialize , Deserialize } ;
7
+
5
8
/// Error codes
6
9
#[ repr( u32 ) ]
7
10
#[ derive( Clone , Copy , Debug , PartialEq ) ]
11
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
8
12
pub enum AfError {
9
13
/// The function returned successfully
10
14
SUCCESS = 0 ,
@@ -52,6 +56,7 @@ pub enum AfError {
52
56
/// Compute/Acceleration Backend
53
57
#[ repr( u32 ) ]
54
58
#[ derive( Clone , Copy , Debug , PartialEq ) ]
59
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
55
60
pub enum Backend {
56
61
/// Default backend order: OpenCL -> CUDA -> CPU
57
62
DEFAULT = 0 ,
@@ -103,6 +108,7 @@ impl Display for AfError {
103
108
/// Types of Array data type
104
109
#[ repr( u32 ) ]
105
110
#[ derive( Clone , Copy , Debug , PartialEq ) ]
111
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
106
112
pub enum DType {
107
113
/// 32 bit float
108
114
F32 = 0 ,
@@ -135,6 +141,7 @@ pub enum DType {
135
141
/// Dictates the interpolation method to be used by a function
136
142
#[ repr( u32 ) ]
137
143
#[ derive( Clone , Copy , Debug , PartialEq ) ]
144
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
138
145
pub enum InterpType {
139
146
/// Nearest Neighbor interpolation method
140
147
NEAREST = 0 ,
@@ -161,6 +168,7 @@ pub enum InterpType {
161
168
/// Helps determine how to pad kernels along borders
162
169
#[ repr( u32 ) ]
163
170
#[ derive( Clone , Copy , Debug , PartialEq ) ]
171
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
164
172
pub enum BorderType {
165
173
/// Pad using zeros
166
174
ZERO = 0 ,
@@ -177,6 +185,7 @@ pub enum BorderType {
177
185
/// Used by `regions` function to identify type of connectivity
178
186
#[ repr( u32 ) ]
179
187
#[ derive( Clone , Copy , Debug , PartialEq ) ]
188
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
180
189
pub enum Connectivity {
181
190
/// North-East-South-West (N-E-S-W) connectivity from given pixel/point
182
191
FOUR = 4 ,
@@ -187,6 +196,7 @@ pub enum Connectivity {
187
196
/// Helps determine the size of output of convolution
188
197
#[ repr( u32 ) ]
189
198
#[ derive( Clone , Copy , Debug , PartialEq ) ]
199
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
190
200
pub enum ConvMode {
191
201
/// Default convolution mode where output size is same as input size
192
202
DEFAULT = 0 ,
@@ -197,6 +207,7 @@ pub enum ConvMode {
197
207
/// Helps determine if convolution is in Spatial or Frequency domain
198
208
#[ repr( u32 ) ]
199
209
#[ derive( Clone , Copy , Debug , PartialEq ) ]
210
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
200
211
pub enum ConvDomain {
201
212
/// ArrayFire chooses whether the convolution will be in spatial domain or frequency domain
202
213
AUTO = 0 ,
@@ -209,6 +220,7 @@ pub enum ConvDomain {
209
220
/// Error metric used by `matchTemplate` function
210
221
#[ repr( u32 ) ]
211
222
#[ derive( Clone , Copy , Debug , PartialEq ) ]
223
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
212
224
pub enum MatchType {
213
225
/// Sum of Absolute Differences
214
226
SAD = 0 ,
@@ -233,6 +245,7 @@ pub enum MatchType {
233
245
/// Identify the color space of given image(Array)
234
246
#[ repr( u32 ) ]
235
247
#[ derive( Clone , Copy , Debug , PartialEq ) ]
248
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
236
249
pub enum ColorSpace {
237
250
/// Grayscale color space
238
251
GRAY = 0 ,
@@ -245,6 +258,7 @@ pub enum ColorSpace {
245
258
/// Helps determine the type of a Matrix
246
259
#[ repr( u32 ) ]
247
260
#[ derive( Clone , Copy , Debug , PartialEq ) ]
261
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
248
262
pub enum MatProp {
249
263
/// Default (no-op)
250
264
NONE = 0 ,
@@ -276,6 +290,7 @@ pub enum MatProp {
276
290
#[ allow( non_camel_case_types) ]
277
291
#[ repr( u32 ) ]
278
292
#[ derive( Clone , Copy , Debug , PartialEq ) ]
293
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
279
294
pub enum NormType {
280
295
/// Treats input as a vector and return sum of absolute values
281
296
VECTOR_1 = 0 ,
@@ -298,6 +313,7 @@ pub enum NormType {
298
313
/// Dictates what color map is used for Image rendering
299
314
#[ repr( u32 ) ]
300
315
#[ derive( Clone , Copy , Debug , PartialEq ) ]
316
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
301
317
pub enum ColorMap {
302
318
/// Default color map is grayscale range [0-1]
303
319
DEFAULT = 0 ,
@@ -318,6 +334,7 @@ pub enum ColorMap {
318
334
/// YCbCr Standards
319
335
#[ repr( u32 ) ]
320
336
#[ derive( Clone , Copy , Debug , PartialEq ) ]
337
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
321
338
pub enum YCCStd {
322
339
/// ITU-R BT.601 (formerly CCIR 601) standard
323
340
YCC_601 = 601 ,
@@ -330,6 +347,7 @@ pub enum YCCStd {
330
347
/// Homography type
331
348
#[ repr( u32 ) ]
332
349
#[ derive( Clone , Copy , Debug , PartialEq ) ]
350
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
333
351
pub enum HomographyType {
334
352
/// RANdom SAmple Consensus algorithm
335
353
RANSAC = 0 ,
@@ -340,6 +358,7 @@ pub enum HomographyType {
340
358
/// Plotting markers
341
359
#[ repr( u32 ) ]
342
360
#[ derive( Clone , Copy , Debug , PartialEq ) ]
361
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
343
362
pub enum MarkerType {
344
363
/// No marker
345
364
NONE = 0 ,
@@ -362,6 +381,7 @@ pub enum MarkerType {
362
381
/// Image moment types
363
382
#[ repr( u32 ) ]
364
383
#[ derive( Clone , Copy , Debug , PartialEq ) ]
384
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
365
385
pub enum MomentType {
366
386
/// Central moment of order (0 + 0)
367
387
M00 = 1 , // 1<<0
@@ -378,6 +398,7 @@ pub enum MomentType {
378
398
/// Sparse storage format type
379
399
#[ repr( u32 ) ]
380
400
#[ derive( Clone , Copy , Debug , PartialEq ) ]
401
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
381
402
pub enum SparseFormat {
382
403
/// Dense format
383
404
DENSE = 0 ,
@@ -392,6 +413,7 @@ pub enum SparseFormat {
392
413
/// Binary operation types for generalized scan functions
393
414
#[ repr( u32 ) ]
394
415
#[ derive( Clone , Copy , Debug , PartialEq ) ]
416
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
395
417
pub enum BinaryOp {
396
418
/// Addition operation
397
419
ADD = 0 ,
@@ -406,6 +428,7 @@ pub enum BinaryOp {
406
428
/// Random engine types
407
429
#[ repr( u32 ) ]
408
430
#[ derive( Clone , Copy , Debug , PartialEq ) ]
431
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
409
432
pub enum RandomEngineType {
410
433
///Philox variant with N=4, W=32 and Rounds=10
411
434
PHILOX_4X32_10 = 100 ,
@@ -456,6 +479,7 @@ pub enum Scalar {
456
479
/// Canny edge detector threshold operations types
457
480
#[ repr( u32 ) ]
458
481
#[ derive( Clone , Copy , Debug , PartialEq ) ]
482
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
459
483
pub enum CannyThresholdType {
460
484
/// User has to define canny thresholds manually
461
485
MANUAL = 0 ,
@@ -466,6 +490,7 @@ pub enum CannyThresholdType {
466
490
/// Anisotropic diffusion flux equation types
467
491
#[ repr( u32 ) ]
468
492
#[ derive( Clone , Copy , Debug , PartialEq ) ]
493
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
469
494
pub enum DiffusionEq {
470
495
/// Quadratic flux function
471
496
QUADRATIC = 1 ,
@@ -478,6 +503,7 @@ pub enum DiffusionEq {
478
503
/// Diffusion equation types
479
504
#[ repr( u32 ) ]
480
505
#[ derive( Clone , Copy , Debug , PartialEq ) ]
506
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
481
507
pub enum FluxFn {
482
508
/// Quadratic flux function
483
509
GRADIENT = 1 ,
@@ -490,6 +516,7 @@ pub enum FluxFn {
490
516
/// topk function ordering
491
517
#[ repr( u32 ) ]
492
518
#[ derive( Clone , Copy , Debug , PartialEq ) ]
519
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
493
520
pub enum TopkFn {
494
521
/// Top k min values
495
522
MIN = 1 ,
@@ -502,6 +529,7 @@ pub enum TopkFn {
502
529
/// Iterative Deconvolution Algorithm
503
530
#[ repr( u32 ) ]
504
531
#[ derive( Clone , Copy , Debug , PartialEq ) ]
532
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
505
533
pub enum IterativeDeconvAlgo {
506
534
/// Land-Weber Algorithm
507
535
LANDWEBER = 1 ,
@@ -514,6 +542,7 @@ pub enum IterativeDeconvAlgo {
514
542
/// Inverse Deconvolution Algorithm
515
543
#[ repr( u32 ) ]
516
544
#[ derive( Clone , Copy , Debug , PartialEq ) ]
545
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
517
546
pub enum InverseDeconvAlgo {
518
547
/// Tikhonov algorithm
519
548
TIKHONOV = 1 ,
@@ -524,6 +553,7 @@ pub enum InverseDeconvAlgo {
524
553
/// Gradient mode for convolution
525
554
#[ repr( u32 ) ]
526
555
#[ derive( Clone , Copy , Debug , PartialEq ) ]
556
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
527
557
pub enum ConvGradientType {
528
558
/// Filter Gradient
529
559
FILTER = 1 ,
@@ -538,6 +568,7 @@ pub enum ConvGradientType {
538
568
/// Gradient mode for convolution
539
569
#[ repr( u32 ) ]
540
570
#[ derive( Clone , Copy , Debug , PartialEq ) ]
571
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
541
572
pub enum VarianceBias {
542
573
/// Sample variance
543
574
SAMPLE = 1 ,
@@ -550,9 +581,29 @@ pub enum VarianceBias {
550
581
/// Gradient mode for convolution
551
582
#[ repr( u32 ) ]
552
583
#[ derive( Clone , Copy , Debug , PartialEq ) ]
584
+ #[ cfg_attr( feature = "afserde" , derive( Serialize , Deserialize ) ) ]
553
585
pub enum CublasMathMode {
554
586
/// To indicate use of Tensor Cores on CUDA capable GPUs
555
587
TENSOR_OP = 1 ,
556
588
/// Default i.e. tensor core operations will be avoided by the library
557
589
DEFAULT = 0 ,
558
590
}
591
+
592
+ #[ cfg( test) ]
593
+ mod tests {
594
+ #[ cfg( feature = "afserde" ) ]
595
+ #[ test]
596
+ fn test_enum_serde ( ) {
597
+ use super :: AfError ;
598
+
599
+ let err_code = AfError :: ERR_NO_MEM ;
600
+ let serd = match serde_json:: to_string ( & err_code) {
601
+ Ok ( serialized_str) => serialized_str,
602
+ Err ( e) => e. to_string ( ) ,
603
+ } ;
604
+ assert_eq ! ( serd, "\" ERR_NO_MEM\" " ) ;
605
+
606
+ let deserd: AfError = serde_json:: from_str ( & serd) . unwrap ( ) ;
607
+ assert_eq ! ( deserd, AfError :: ERR_NO_MEM ) ;
608
+ }
609
+ }
0 commit comments