1mod impl_display;
2mod impl_try_from_meta_bytes;
3
4#[derive(Debug)]
16#[derive(Clone, Copy)]
17#[derive(PartialEq, Eq)]
18#[derive(PartialOrd, Ord)]
19#[cfg_attr(
20 feature = "seq-marked-serde",
21 derive(serde::Serialize, serde::Deserialize)
22)]
23#[cfg_attr(
24 feature = "seq-marked-bincode",
25 derive(bincode::Encode, bincode::Decode)
26)]
27pub enum Marked<D> {
28 Normal(D),
31
32 TombStone,
34}
35
36#[cfg(test)]
37mod tests {
38
39 use super::*;
40
41 #[test]
42 fn test_marked_is_copy() {
43 let marked = Marked::Normal("data");
44 let marked_copy = marked;
45 assert_eq!(marked, marked_copy);
46 }
47
48 #[test]
49 fn test_marked_ord() {
50 let a = Marked::Normal(1u64);
51 let b = Marked::TombStone;
52
53 assert!(a < b);
54 assert!(b > a);
55 assert_eq!(a, a);
56 assert_eq!(b, b);
57 }
58}
59
60#[cfg(test)]
61#[cfg(feature = "seq-marked-bincode")]
62mod tests_bincode {
63
64 use super::*;
65 use crate::testing::bincode_config;
66 use crate::testing::test_bincode_decode;
67
68 #[test]
69 fn test_marked_bincode() {
70 let a = Marked::Normal(1u64);
71 let encoded = bincode::encode_to_vec(&a, bincode_config()).unwrap();
72 let (decoded, n): (Marked<u64>, usize) =
73 bincode::decode_from_slice(&encoded, bincode_config()).unwrap();
74 assert_eq!(n, 2);
75 assert_eq!(a, decoded);
76 }
77
78 #[test]
79 fn test_marked_bincode_decode_v010() -> anyhow::Result<()> {
80 let value = Marked::Normal(1u64);
81 let encoded = vec![0, 1];
82
83 test_bincode_decode(&encoded, &value)?;
84
85 let value = Marked::TombStone::<()>;
86 let encoded = vec![1];
87
88 test_bincode_decode(&encoded, &value)?;
89 Ok(())
90 }
91}
92
93#[cfg(test)]
94#[cfg(feature = "seq-marked-serde")]
95mod tests_serde {
96 use super::*;
97 use crate::testing::test_serde_decode;
98
99 #[test]
100 fn test_marked_serde() {
101 let a = Marked::Normal(1u64);
102 let encoded = serde_json::to_string(&a).unwrap();
103 let decoded: Marked<u64> = serde_json::from_str(&encoded).unwrap();
104 assert_eq!(a, decoded);
105 }
106
107 #[test]
108 fn test_marked_serde_decode_v010() -> anyhow::Result<()> {
109 let value = Marked::Normal(1u64);
110 let encoded = r#"{"Normal":1}"#;
111
112 test_serde_decode(encoded, &value)?;
113
114 let value = Marked::TombStone::<()>;
115 let encoded = r#""TombStone""#;
116
117 test_serde_decode(encoded, &value)?;
118 Ok(())
119 }
120}