fuzzcheck/serializers/
mod.rs1#[cfg(feature = "serde_ron_serializer")]
15mod serde_ron_serializer;
16#[cfg(feature = "serde_json_serializer")]
17mod serde_serializer;
18
19use std::marker::PhantomData;
20use std::str::FromStr;
21
22#[cfg(feature = "serde_ron_serializer")]
23pub use serde_ron_serializer::SerdeRonSerializer;
24#[cfg(feature = "serde_json_serializer")]
25pub use serde_serializer::SerdeSerializer;
26
27use crate::Serializer;
28
29pub struct ByteSerializer {
33 ext: &'static str,
34}
35
36impl ByteSerializer {
37 #[coverage(off)]
45 pub fn new(ext: &'static str) -> Self {
46 Self { ext }
47 }
48}
49
50impl crate::traits::Serializer for ByteSerializer {
51 type Value = Vec<u8>;
52
53 #[coverage(off)]
54 fn extension(&self) -> &str {
55 self.ext
56 }
57 #[coverage(off)]
58 fn from_data(&self, data: &[u8]) -> Option<Self::Value> {
59 Some(data.into())
60 }
61 #[coverage(off)]
62 fn to_data(&self, value: &Self::Value) -> Vec<u8> {
63 value.clone()
64 }
65}
66
67pub struct StringSerializer<StringType>
72where
73 StringType: ToString + FromStr,
74{
75 pub extension: &'static str,
76 _phantom: PhantomData<StringType>,
77}
78impl<StringType> StringSerializer<StringType>
79where
80 StringType: ToString + FromStr,
81{
82 #[coverage(off)]
90 pub fn new(extension: &'static str) -> Self {
91 Self {
92 extension,
93 _phantom: PhantomData,
94 }
95 }
96}
97impl<StringType> Serializer for StringSerializer<StringType>
98where
99 StringType: ToString + FromStr,
100{
101 type Value = StringType;
102
103 #[coverage(off)]
104 fn extension(&self) -> &str {
105 self.extension
106 }
107 #[coverage(off)]
108 fn from_data(&self, data: &[u8]) -> Option<Self::Value> {
109 let string = String::from_utf8(data.to_vec()).ok()?;
110 let value = Self::Value::from_str(&string).ok()?;
111 Some(value)
112 }
113 #[coverage(off)]
114 fn to_data(&self, value: &Self::Value) -> Vec<u8> {
115 value.to_string().into_bytes()
116 }
117}