/// Zero-Sized Type (ZST) for internal `BTreeSet` values. /// Used instead of `()` to differentiate between: /// * `BTreeMap` (possible user-defined map) /// * `BTreeMap` (internal set representation) #[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Clone, Default)] pub struct SetValZST; /// A trait to differentiate between `BTreeMap` and `BTreeSet` values. /// Returns `true` only for type `SetValZST`, `false` for all other types (blanket implementation). /// `TypeId` requires a `'static` lifetime, use of this trait avoids that restriction. /// /// [`TypeId`]: std::any::TypeId pub trait IsSetVal { fn is_set_val() -> bool; } // Blanket implementation impl IsSetVal for V { default fn is_set_val() -> bool { false } } // Specialization impl IsSetVal for SetValZST { fn is_set_val() -> bool { true } }