1
1
use ark_std:: ops:: { Deref , DerefMut } ;
2
2
3
+ #[ cfg( feature = "serde" ) ]
4
+ use :: serde:: { Deserializer , Serializer } ;
3
5
#[ cfg( feature = "serde" ) ]
4
6
use ark_std:: string:: ToString ;
5
7
@@ -21,6 +23,78 @@ pub struct CompressedChecked<T>(pub T);
21
23
#[ derive( Copy , Clone , Eq , PartialEq , Ord , PartialOrd , Hash , Debug , Default ) ]
22
24
pub struct UncompressedChecked < T > ( pub T ) ;
23
25
26
+ #[ cfg( feature = "serde" ) ]
27
+ pub fn serialize < S : Serializer > (
28
+ value : & impl CanonicalSerialize ,
29
+ compress : Compress ,
30
+ s : S ,
31
+ ) -> Result < S :: Ok , S :: Error > {
32
+ use :: serde:: Serialize ;
33
+ match compress {
34
+ Compress :: Yes => CompressedUnchecked ( value) . serialize ( s) ,
35
+ Compress :: No => UncompressedUnchecked ( value) . serialize ( s) ,
36
+ }
37
+ }
38
+
39
+ #[ cfg( feature = "serde" ) ]
40
+ pub fn deserialize < ' de , T : CanonicalDeserialize , D : Deserializer < ' de > > (
41
+ d : D ,
42
+ compress : Compress ,
43
+ checked : Validate ,
44
+ ) -> Result < T , D :: Error > {
45
+ use :: serde:: Deserialize ;
46
+ match ( checked, compress) {
47
+ ( Validate :: Yes , Compress :: Yes ) => CompressedChecked :: < T > :: deserialize ( d) . map ( |val| val. 0 ) ,
48
+ ( Validate :: No , Compress :: Yes ) => CompressedUnchecked :: < T > :: deserialize ( d) . map ( |val| val. 0 ) ,
49
+ ( Validate :: Yes , Compress :: No ) => UncompressedChecked :: < T > :: deserialize ( d) . map ( |val| val. 0 ) ,
50
+ ( Validate :: No , Compress :: No ) => UncompressedUnchecked :: < T > :: deserialize ( d) . map ( |val| val. 0 ) ,
51
+ }
52
+ }
53
+
54
+ #[ cfg( feature = "serde" ) ]
55
+ pub fn serialize_compressed < S : Serializer > (
56
+ value : & impl CanonicalSerialize ,
57
+ s : S ,
58
+ ) -> Result < S :: Ok , S :: Error > {
59
+ serialize ( value, Compress :: Yes , s)
60
+ }
61
+
62
+ #[ cfg( feature = "serde" ) ]
63
+ pub fn serialize_uncompressed < S : Serializer > (
64
+ value : & impl CanonicalSerialize ,
65
+ s : S ,
66
+ ) -> Result < S :: Ok , S :: Error > {
67
+ serialize ( value, Compress :: No , s)
68
+ }
69
+
70
+ #[ cfg( feature = "serde" ) ]
71
+ pub fn deserialize_compressed_checked < ' de , T : CanonicalDeserialize , D : Deserializer < ' de > > (
72
+ d : D ,
73
+ ) -> Result < T , D :: Error > {
74
+ deserialize ( d, Compress :: Yes , Validate :: Yes )
75
+ }
76
+
77
+ #[ cfg( feature = "serde" ) ]
78
+ pub fn deserialize_uncompressed_checked < ' de , T : CanonicalDeserialize , D : Deserializer < ' de > > (
79
+ d : D ,
80
+ ) -> Result < T , D :: Error > {
81
+ deserialize ( d, Compress :: No , Validate :: Yes )
82
+ }
83
+
84
+ #[ cfg( feature = "serde" ) ]
85
+ pub fn deserialize_compressed_unchecked < ' de , T : CanonicalDeserialize , D : Deserializer < ' de > > (
86
+ d : D ,
87
+ ) -> Result < T , D :: Error > {
88
+ deserialize ( d, Compress :: Yes , Validate :: No )
89
+ }
90
+
91
+ #[ cfg( feature = "serde" ) ]
92
+ pub fn deserialize_uncompressed_unchecked < ' de , T : CanonicalDeserialize , D : Deserializer < ' de > > (
93
+ d : D ,
94
+ ) -> Result < T , D :: Error > {
95
+ deserialize ( d, Compress :: No , Validate :: No )
96
+ }
97
+
24
98
macro_rules! impl_ops {
25
99
( $type: ty, $cons: expr) => {
26
100
impl <T > Deref for $type {
0 commit comments