cast_error

This commit is contained in:
AF 2023-08-01 20:55:38 +00:00
parent be427e4e87
commit f08b7d3c7a

View File

@ -169,20 +169,33 @@ impl<'a, Ctx: CastCtx<'a>> TypelessMentionable<'a, Ctx> {
} }
} }
fn cast_resolve<'a, Ctx: CastCtx<'a>, A: Mentionable<'a, Ctx>>( fn cast_error<'a, Ctx: CastCtx<'a>, A: Mentionable<'a, Ctx>>(
typeless_origin: Rc<dyn Origin<'a, Ctx, Mtbl = TypelessMentionable<'a, Ctx>>>, error: ResolutionFailure<'a, Ctx, TypelessMentionable<'a, Ctx>>,
) -> ResolutionFailure<'a, Ctx, A> {
ResolutionError::Lookup(match error {
ResolutionError::Lookup(lookup_error) => lookup_error,
ResolutionError::Parse(parse_error) => Ctx::from_cast(CastError::Typeless(parse_error)),
})
}
fn cast_resolved<'a, Ctx: CastCtx<'a>, A: Mentionable<'a, Ctx>>(
resolved: ResolutionResult<'a, Ctx, TypelessMentionable<'a, Ctx>>,
factory: A::Fctr, factory: A::Fctr,
) -> Resolution<'a, Ctx, A> { ) -> ResolutionResult<'a, Ctx, A> {
typeless_origin.resolve_map(|resolved| match resolved { match resolved {
Ok(typeless_mentionable) => match typeless_mentionable.cast(factory) { Ok(typeless_mentionable) => match typeless_mentionable.cast(factory) {
Ok(mentionable) => Ok(Rc::new(mentionable)), Ok(mentionable) => Ok(Rc::new(mentionable)),
Err(parse_error) => Err(ResolutionError::Parse(parse_error)), Err(parse_error) => Err(ResolutionError::Parse(parse_error)),
}, },
Err(error) => Err(ResolutionError::Lookup(match error { Err(error) => Err(cast_error::<Ctx, A>(error)),
ResolutionError::Lookup(lookup_error) => lookup_error, }
ResolutionError::Parse(parse_error) => Ctx::from_cast(CastError::Typeless(parse_error)), }
})),
}) fn cast_resolve<'a, Ctx: CastCtx<'a>, A: Mentionable<'a, Ctx>>(
typeless_origin: Rc<dyn Origin<'a, Ctx, Mtbl = TypelessMentionable<'a, Ctx>>>,
factory: A::Fctr,
) -> Resolution<'a, Ctx, A> {
typeless_origin.resolve_map(|resolved| cast_resolved(resolved, factory))
} }
fn cast_origin<'a, Ctx: CastCtx<'a>, A: Mentionable<'a, Ctx>>( fn cast_origin<'a, Ctx: CastCtx<'a>, A: Mentionable<'a, Ctx>>(