use crate::{SimpleType, StaticType}; pub(crate) mod de; pub(crate) mod ser; #[derive(Debug, Clone, Copy)] pub struct NoAnnot; #[derive(Debug, Clone, Copy)] pub struct ManualAnnot<'ty>(&'ty SimpleType); #[derive(Debug, Clone, Copy)] pub struct StaticAnnot; pub trait TypeAnnot: Copy {} pub trait HasAnnot { fn get_annot(a: A) -> Option; } impl TypeAnnot for NoAnnot {} impl TypeAnnot for ManualAnnot<'_> {} impl TypeAnnot for StaticAnnot {} impl HasAnnot for T { fn get_annot(_: NoAnnot) -> Option { None } } impl HasAnnot> for T { fn get_annot(a: ManualAnnot<'_>) -> Option { Some(a.0.clone()) } } impl HasAnnot for T { fn get_annot(_: StaticAnnot) -> Option { Some(T::static_type()) } }