Trait serde_reflection::FormatHolder [−][src]
pub trait FormatHolder { fn visit<'a>(
&'a self,
f: &mut dyn FnMut(&'a Format) -> Result<()>
) -> Result<()>; fn visit_mut(
&mut self,
f: &mut dyn FnMut(&mut Format) -> Result<()>
) -> Result<()>; fn unify(&mut self, other: Self) -> Result<()>; fn is_unknown(&self) -> bool; fn normalize(&mut self) -> Result<()> { ... } fn reduce(&mut self) { ... } }
Expand description
Common methods for nodes in the AST of formats.
Required methods
fn visit<'a>(
&'a self,
f: &mut dyn FnMut(&'a Format) -> Result<()>
) -> Result<()>
[src]
fn visit<'a>(
&'a self,
f: &mut dyn FnMut(&'a Format) -> Result<()>
) -> Result<()>
[src]Visit all the formats in self
in a depth-first way.
Variables are not supported and will cause an error.
fn visit_mut(
&mut self,
f: &mut dyn FnMut(&mut Format) -> Result<()>
) -> Result<()>
[src]
fn visit_mut(
&mut self,
f: &mut dyn FnMut(&mut Format) -> Result<()>
) -> Result<()>
[src]Mutably visit all the formats in self
in a depth-first way.
- Replace variables (if any) with their known values then apply the
visiting function
f
. - Return an error if any variable has still an unknown value (thus cannot be removed).
fn unify(&mut self, other: Self) -> Result<()>
[src]
fn unify(&mut self, other: Self) -> Result<()>
[src]Update variables and add missing enum variants so that the terms match. This is a special case of term unification:
- Variables occurring in
other
must be “fresh” and distinct from each other. By “fresh”, we mean that they do not occur inself
and have no known value yet. - If needed, enums in
self
will be extended with new variants taken fromother
. - Although the parameter
other
is consumed (i.e. taken by value), all variables occurring either inself
orother
are correctly updated.
fn is_unknown(&self) -> bool
[src]
fn is_unknown(&self) -> bool
[src]Whether this format is a variable with no known value yet.
Provided methods
Implementors
impl FormatHolder for ContainerFormat
[src]
impl FormatHolder for ContainerFormat
[src]impl FormatHolder for Format
[src]
impl FormatHolder for Format
[src]impl FormatHolder for VariantFormat
[src]
impl FormatHolder for VariantFormat
[src]impl<T> FormatHolder for Named<T> where
T: FormatHolder + Debug,
[src]
impl<T> FormatHolder for Named<T> where
T: FormatHolder + Debug,
[src]impl<T> FormatHolder for Variable<T> where
T: FormatHolder + Debug + Clone,
[src]
impl<T> FormatHolder for Variable<T> where
T: FormatHolder + Debug + Clone,
[src]