mod impl_display;
mod impl_try_from_meta_bytes;
#[derive(Debug)]
#[derive(Clone, Copy)]
#[derive(PartialEq, Eq)]
#[derive(PartialOrd, Ord)]
#[cfg_attr(
feature = "seq-marked-serde",
derive(serde::Serialize, serde::Deserialize)
)]
#[cfg_attr(
feature = "seq-marked-bincode",
derive(bincode::Encode, bincode::Decode)
)]
pub enum Marked<D> {
Normal(D),
TombStone,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_marked_is_copy() {
let marked = Marked::Normal("data");
let marked_copy = marked;
assert_eq!(marked, marked_copy);
}
#[test]
fn test_marked_ord() {
let a = Marked::Normal(1u64);
let b = Marked::TombStone;
assert!(a < b);
assert!(b > a);
assert_eq!(a, a);
assert_eq!(b, b);
}
}
#[cfg(test)]
#[cfg(feature = "seq-marked-bincode")]
mod tests_bincode {
use super::*;
use crate::testing::bincode_config;
use crate::testing::test_bincode_decode;
#[test]
fn test_marked_bincode() {
let a = Marked::Normal(1u64);
let encoded = bincode::encode_to_vec(&a, bincode_config()).unwrap();
let (decoded, n): (Marked<u64>, usize) =
bincode::decode_from_slice(&encoded, bincode_config()).unwrap();
assert_eq!(n, 2);
assert_eq!(a, decoded);
}
#[test]
fn test_marked_bincode_decode_v010() -> anyhow::Result<()> {
let value = Marked::Normal(1u64);
let encoded = vec![0, 1];
test_bincode_decode(&encoded, &value)?;
let value = Marked::TombStone::<()>;
let encoded = vec![1];
test_bincode_decode(&encoded, &value)?;
Ok(())
}
}
#[cfg(test)]
#[cfg(feature = "seq-marked-serde")]
mod tests_serde {
use super::*;
use crate::testing::test_serde_decode;
#[test]
fn test_marked_serde() {
let a = Marked::Normal(1u64);
let encoded = serde_json::to_string(&a).unwrap();
let decoded: Marked<u64> = serde_json::from_str(&encoded).unwrap();
assert_eq!(a, decoded);
}
#[test]
fn test_marked_serde_decode_v010() -> anyhow::Result<()> {
let value = Marked::Normal(1u64);
let encoded = r#"{"Normal":1}"#;
test_serde_decode(encoded, &value)?;
let value = Marked::TombStone::<()>;
let encoded = r#""TombStone""#;
test_serde_decode(encoded, &value)?;
Ok(())
}
}