1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
use std::fmt; use std::error::Error; use Symbol; /// This is validator trait you should implement for your own symbols /// /// In reality this trait serves three purposes: /// /// 1. Validates that atom contains only value you expect it to contain /// 2. Identifies the type i.e. `type S1 = Symbol<V1>` and /// `type S2 = Symbol<V2>` are different and incompatible types /// 3. Allows to override `Display` trait for your own symbol pub trait Validator { type Err: Error; fn validate_symbol(&str) -> Result<(), Self::Err>; fn display(value: &Symbol<Self>, fmt: &mut fmt::Formatter) -> fmt::Result { write!(fmt, "i{:?}", value.as_ref()) } }