StackNodeFactory::parse_point

This commit is contained in:
AF 2023-06-30 23:11:02 +00:00
parent 75d68e54ba
commit d6c4ca11b5

View File

@ -75,13 +75,25 @@ impl<ElementParseError: Error> Display for StackParseError<ElementParseError> {
impl<ElementParseError: Error> Error for StackParseError<ElementParseError> {} impl<ElementParseError: Error> Error for StackParseError<ElementParseError> {}
impl<F> StackNodeFactory<F> {
fn parse_point<'a, Ctx: Context<'a>, I: InCtx<'a, Ctx>>(
&self,
inctx: I,
) -> IParseResult<'a, Ctx, NullableFactory<Self>, I>
where
F: Factory<'a, Ctx>,
{
NullableFactory::new(self.clone()).ideserialize(inctx)
}
}
impl<'a, Ctx: Context<'a>, F: Factory<'a, Ctx>> Factory<'a, Ctx> for StackNodeFactory<F> { impl<'a, Ctx: Context<'a>, F: Factory<'a, Ctx>> Factory<'a, Ctx> for StackNodeFactory<F> {
type Mtbl = StackNode<'a, Ctx, F::Mtbl>; type Mtbl = StackNode<'a, Ctx, F::Mtbl>;
type ParseError = StackParseError<ParseError<'a, Ctx, F>>; type ParseError = StackParseError<ParseError<'a, Ctx, F>>;
fn deserialize(&self, inctx: impl InCtx<'a, Ctx>) -> ParseResult<'a, Ctx, Self> { fn deserialize(&self, inctx: impl InCtx<'a, Ctx>) -> ParseResult<'a, Ctx, Self> {
let (rest, inctx) = NullableFactory::new(self.clone()).ideserialize(inctx)?; let (rest, inctx) = self.parse_point(inctx)?;
let element = self let element = self
.element_factory .element_factory
.deserialize(inctx) .deserialize(inctx)
@ -173,7 +185,7 @@ impl<'a, Ctx: Context<'a>, F: InlineableFactory<'a, Ctx>> InlineableFactory<'a,
} }
fn ideserialize<I: InCtx<'a, Ctx>>(&self, inctx: I) -> IParseResult<'a, Ctx, Self, I> { fn ideserialize<I: InCtx<'a, Ctx>>(&self, inctx: I) -> IParseResult<'a, Ctx, Self, I> {
let (rest, inctx) = NullableFactory::new(self.clone()).ideserialize(inctx)?; let (rest, inctx) = self.parse_point(inctx)?;
let (element, inctx) = self let (element, inctx) = self
.element_factory .element_factory
.ideserialize(inctx) .ideserialize(inctx)