Skip to content

Commit 1fc5ca2

Browse files
committed
Add helper functions for serde-compatibility
1 parent 1546116 commit 1fc5ca2

File tree

2 files changed

+78
-2
lines changed

2 files changed

+78
-2
lines changed

serialize/src/lib.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ mod error;
1212
mod flags;
1313
mod impls;
1414

15-
mod serde;
15+
pub mod serde;
1616

1717
pub use ark_std::io::{Read, Write};
1818

1919
pub use error::*;
2020
pub use flags::*;
21-
pub use serde::*;
21+
pub use serde::{
22+
CompressedChecked, CompressedUnchecked, UncompressedChecked, UncompressedUnchecked,
23+
};
2224

2325
#[cfg(test)]
2426
mod test;

serialize/src/serde.rs

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use ark_std::ops::{Deref, DerefMut};
22

3+
#[cfg(feature = "serde")]
4+
use ::serde::{Deserializer, Serializer};
35
#[cfg(feature = "serde")]
46
use ark_std::string::ToString;
57

@@ -21,6 +23,78 @@ pub struct CompressedChecked<T>(pub T);
2123
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug, Default)]
2224
pub struct UncompressedChecked<T>(pub T);
2325

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+
2498
macro_rules! impl_ops {
2599
($type:ty, $cons:expr) => {
26100
impl<T> Deref for $type {

0 commit comments

Comments
 (0)