pub struct RelationParser<'a> {
tree: TreeBuilder<'a>,
}Fields§
§tree: TreeBuilder<'a>Implementations§
Source§impl<'a> RelationParser<'a>
impl<'a> RelationParser<'a>
pub fn parse_line( &mut self, line: IndentedLine<'a>, line_no: i64, ) -> Result<(), ParseError>
Sourcefn parse_relation(
&self,
extensions: &SimpleExtensions,
registry: &ExtensionRegistry,
ctx: RelationContext<'_>,
) -> Result<(Rel, usize), ParseError>
fn parse_relation( &self, extensions: &SimpleExtensions, registry: &ExtensionRegistry, ctx: RelationContext<'_>, ) -> Result<(Rel, usize), ParseError>
Dispatch by grammar rule after validating addenda constraints.
Standard relations go through parse_rel;
extension relations go through
parse_extension_relation.
Sourcefn parse_rel<T: RelationParsePair>(
&self,
extensions: &SimpleExtensions,
registry: &ExtensionRegistry,
ctx: RelationContext<'_>,
) -> Result<(Rel, usize), ParseError>
fn parse_rel<T: RelationParsePair>( &self, extensions: &SimpleExtensions, registry: &ExtensionRegistry, ctx: RelationContext<'_>, ) -> Result<(Rel, usize), ParseError>
Generic bridge between parse_relation and
the RelationParsePair trait: wraps MessageParseError with line
context and calls into_rel to apply
addenda and produce the final Rel.
Sourcefn parse_extension_relation(
&self,
extensions: &SimpleExtensions,
registry: &ExtensionRegistry,
ctx: RelationContext<'_>,
) -> Result<(Rel, usize), ParseError>
fn parse_extension_relation( &self, extensions: &SimpleExtensions, registry: &ExtensionRegistry, ctx: RelationContext<'_>, ) -> Result<(Rel, usize), ParseError>
Handle extension relations separately from parse_rel
because they need registry lookups that RelationParsePair doesn’t
support.
Sourcefn parse_extension_read_relation(
&self,
extensions: &SimpleExtensions,
registry: &ExtensionRegistry,
ctx: RelationContext<'_>,
) -> Result<(Rel, usize), ParseError>
fn parse_extension_read_relation( &self, extensions: &SimpleExtensions, registry: &ExtensionRegistry, ctx: RelationContext<'_>, ) -> Result<(Rel, usize), ParseError>
Parse Read:Extension[...], whose table detail is supplied by exactly
one + Ext:Name[...] addendum.
Sourcefn build_rel(
&self,
extensions: &SimpleExtensions,
registry: &ExtensionRegistry,
node: RelationNode<'_>,
) -> Result<(Rel, usize), ParseError>
fn build_rel( &self, extensions: &SimpleExtensions, registry: &ExtensionRegistry, node: RelationNode<'_>, ) -> Result<(Rel, usize), ParseError>
Walk the relation tree depth-first, converting structural types
(children, addenda) into proto types via RelationContext.
Delegates grammar-rule-specific work to
parse_relation.
Sourcefn build_plan_rel(
&self,
extensions: &SimpleExtensions,
registry: &ExtensionRegistry,
node: RelationNode<'_>,
) -> Result<PlanRel, ParseError>
fn build_plan_rel( &self, extensions: &SimpleExtensions, registry: &ExtensionRegistry, node: RelationNode<'_>, ) -> Result<PlanRel, ParseError>
Build a tree of relations.
Sourcefn build(
self,
extensions: &SimpleExtensions,
registry: &ExtensionRegistry,
) -> Result<Vec<PlanRel>, ParseError>
fn build( self, extensions: &SimpleExtensions, registry: &ExtensionRegistry, ) -> Result<Vec<PlanRel>, ParseError>
Build all the trees.
Trait Implementations§
Source§impl<'a> Clone for RelationParser<'a>
impl<'a> Clone for RelationParser<'a>
Source§fn clone(&self) -> RelationParser<'a>
fn clone(&self) -> RelationParser<'a>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more