[][src]Trait serde_reflection::FormatHolder

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) { ... } }

Common methods for nodes in the AST of formats.

Required methods

fn visit<'a>(
    &'a self,
    f: &mut dyn FnMut(&'a Format) -> Result<()>
) -> Result<()>

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<()>

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<()>

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 in self and have no known value yet.
  • If needed, enums in self will be extended with new variants taken from other.
  • Although the parameter other is consumed (i.e. taken by value), all variables occurring either in self or other are correctly updated.

fn is_unknown(&self) -> bool

Whether this format is a variable with no known value yet.

Loading content...

Provided methods

fn normalize(&mut self) -> Result<()>

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.

fn reduce(&mut self)

Attempt to remove known variables within self. Silently abort if some variables have unknown values.

Loading content...

Implementors

impl FormatHolder for ContainerFormat[src]

impl FormatHolder for Format[src]

fn unify(&mut self, format: Format) -> Result<()>[src]

Unify the newly "traced" value format into the current format. Note that there should be no TupleArrays at this point.

impl FormatHolder for VariantFormat[src]

impl<T> FormatHolder for Named<T> where
    T: FormatHolder + Debug
[src]

impl<T> FormatHolder for Variable<T> where
    T: FormatHolder + Debug + Clone
[src]

Loading content...