pub trait Schema<T> {
// Required method
fn validate(&self, value: &Value) -> ValidateResult<T>;
// Provided methods
fn parse(&self, value: &Value) -> T { ... }
fn safe_parse(&self, value: &Value) -> ValidateResult<T> { ... }
fn optional(self) -> OptionalSchema<Self, T>
where Self: Sized { ... }
fn array(self) -> ArraySchema<Self, T>
where Self: Sized { ... }
}