1use jgenesis_proc_macros::{FakeDecode, FakeEncode};
2use std::fs::File;
3
4#[derive(FakeEncode, FakeDecode)]
5struct NotSerializable {
6    file: Option<File>,
7}
8
9impl Default for NotSerializable {
10    fn default() -> Self {
11        Self { file: None }
12    }
13}
14
15#[test]
16fn fake_encode_decode() {
17    let bincode_config = bincode::config::standard();
18
19    let not_serializable = NotSerializable { file: None };
20
21    let serialized = bincode::encode_to_vec(not_serializable, bincode_config)
22        .expect("Failed to serialize using FakeEncode implementation");
23
24    let (deserialized, _) =
25        bincode::decode_from_slice::<NotSerializable, _>(&serialized, bincode_config)
26            .expect("Failed to deserialize using FakeDecode implementation");
27    assert!(deserialized.file.is_none());
28}
29
30#[derive(FakeEncode, FakeDecode)]
31struct HasGenericType<T: Default>(T);
32
33impl<T: Default> Default for HasGenericType<T> {
34    fn default() -> Self {
35        Self(T::default())
36    }
37}
38
39#[test]
40fn fake_encode_decode_with_generics() {
41    let bincode_config = bincode::config::standard();
42
43    let value: HasGenericType<i32> = HasGenericType(42);
44
45    let serialized = bincode::encode_to_vec(value, bincode_config)
46        .expect("Failed to serialize using FakeEncode implementation");
47
48    let (deserialized, _) =
49        bincode::decode_from_slice::<HasGenericType<i32>, _>(&serialized, bincode_config)
50            .expect("Failed to deserialize using FakeDecode implementation");
51
52    assert_eq!(deserialized.0, 0);
53}