fuzzcheck/serializers/
serde_serializer.rs

1use std::marker::PhantomData;
2
3/// A serializer that uses `serde` and `serde_json` to serialize the test
4/// inputs (of arbitrary type `T: Serializable + for<'e> Deserializable<'e>`)
5/// to a json file.
6#[doc(cfg(feature = "serde_json_serializer"))]
7pub struct SerdeSerializer<S> {
8    phantom: PhantomData<S>,
9}
10
11impl<S> Default for SerdeSerializer<S> {
12    #[coverage(off)]
13    fn default() -> Self {
14        Self { phantom: PhantomData }
15    }
16}
17
18impl<S> crate::traits::Serializer for SerdeSerializer<S>
19where
20    S: serde::Serialize + for<'e> serde::Deserialize<'e>,
21{
22    type Value = S;
23
24    #[coverage(off)]
25    fn extension(&self) -> &str {
26        "json"
27    }
28    #[coverage(off)]
29    fn from_data(&self, data: &[u8]) -> Option<S> {
30        serde_json::from_slice(data).ok()
31    }
32    #[coverage(off)]
33    fn to_data(&self, value: &Self::Value) -> Vec<u8> {
34        serde_json::to_vec(value).unwrap()
35    }
36}