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
Visit all the formats in self
in a depth-first way.
Variables are not supported and will cause an error.
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).
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
fn is_unknown(&self) -> bool
Whether this format is a variable with no known value yet.
Provided methods
Finalize the formats within self
by removing variables and making sure
that all eligible tuples are compressed into a TupleArray
. Return an error
if any variable has an unknown value.