Trait serde_reflection::FormatHolder

source ·
pub trait FormatHolder {
    // Required methods
    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;

    // Provided methods
    fn normalize(&mut self) -> Result<()> { ... }
    fn reduce(&mut self) { ... }
}
Expand description

Common methods for nodes in the AST of formats.

Required Methods§

source

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.

source

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).
source

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.
source

fn is_unknown(&self) -> bool

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

Provided Methods§

source

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.

source

fn reduce(&mut self)

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

Object Safety§

This trait is not object safe.

Implementors§