refactor cast

This commit is contained in:
AF 2023-08-01 21:33:17 +00:00
parent 8db631f87e
commit 1a8d70957b

View File

@ -129,16 +129,12 @@ impl<'a, Ctx: CastCtx<'a>> CastResolver<'a, Ctx> {
fn map_resolved<'a, Ctx: CastCtx<'a>>(
resolved: ResolutionResult<'a, Ctx, TypelessMentionable<'a, Ctx>>,
) -> HashResolutionResult<'a, Ctx> {
match resolved {
Ok(mentionable) => Ok((
resolved.map_err(lookup_error::<Ctx>).map(|mentionable| {
(
mentionable.bytes(),
CastResolver::rc(mentionable.points_vec()),
)),
Err(error) => Err(match error {
ResolutionError::Lookup(lookup_error) => lookup_error,
ResolutionError::Parse(parse_error) => Ctx::from_cast(CastError::Typeless(parse_error)),
}),
}
)
})
}
impl<'a, Ctx: CastCtx<'a>> Resolver<'a, Ctx> for CastResolver<'a, Ctx> {
@ -178,18 +174,13 @@ fn lookup_error<'a, Ctx: CastCtx<'a>>(
}
}
fn cast_error<'a, Ctx: CastCtx<'a>, A: Mentionable<'a, Ctx>>(
error: ResolutionFailure<'a, Ctx, TypelessMentionable<'a, Ctx>>,
) -> ResolutionFailure<'a, Ctx, A> {
ResolutionError::Lookup(lookup_error::<Ctx>(error))
}
fn cast_resolved<'a, Ctx: CastCtx<'a>, A: Mentionable<'a, Ctx>>(
resolved: ResolutionResult<'a, Ctx, TypelessMentionable<'a, Ctx>>,
factory: A::Fctr,
) -> ResolutionResult<'a, Ctx, A> {
resolved
.map_err(cast_error::<Ctx, A>)?
.map_err(lookup_error::<Ctx>)
.map_err(ResolutionError::Lookup)?
.cast(factory)
.map_err(ResolutionError::Parse)
.map(Rc::new)