make SingularRobust
default
This commit is contained in:
parent
0814215594
commit
e8c2ec739d
@ -21,10 +21,6 @@ pub struct SingularResolver<'a, Ctx: Context<'a>> {
|
||||
points: Vec<Arc<dyn SingularResolution<'a, Ctx>>>,
|
||||
}
|
||||
|
||||
struct SingularRobust<'a, Ctx: Context<'a>> {
|
||||
resolver: Arc<SingularResolver<'a, Ctx>>,
|
||||
}
|
||||
|
||||
impl<'a, Ctx: Context<'a>> SingularResolver<'a, Ctx> {
|
||||
pub fn from_mentionable<A: Mentionable<'a, Ctx>>(a: &A) -> Self {
|
||||
let mut points = Vec::new();
|
||||
@ -53,26 +49,11 @@ impl<'a, Ctx: Context<'a>> SingularResolver<'a, Ctx> {
|
||||
Ok(point.clone().singular())
|
||||
}
|
||||
}
|
||||
|
||||
pub fn robust(self) -> Arc<dyn Resolver<'a, Ctx>> {
|
||||
SingularRobust {
|
||||
resolver: self.into(),
|
||||
}
|
||||
.into_rc()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, Ctx: Context<'a>> Resolver<'a, Ctx> for SingularResolver<'a, Ctx> {
|
||||
fn resolve(self: Arc<Self>, address: Address) -> HashResolution<'a, Ctx> {
|
||||
self.resolve_robust(address).unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, Ctx: Context<'a>> Resolver<'a, Ctx> for SingularRobust<'a, Ctx> {
|
||||
fn resolve(self: Arc<Self>, address: Address) -> HashResolution<'a, Ctx> {
|
||||
self.resolver
|
||||
.clone()
|
||||
.resolve_robust(address)
|
||||
self.resolve_robust(address)
|
||||
.map_err(SingularError::into)
|
||||
.map_err(Err)
|
||||
.unwrap_or_else(Ctx::pure)
|
||||
|
@ -8,7 +8,7 @@ pub trait CastMentionable<'a, Ctx: Context<'a>>: Mentionable<'a, Ctx> {
|
||||
fn m_cast<A: Mentionable<'a, Ctx>>(&self, factory: &Fctr<'a, A>) -> ParseResultA<'a, A> {
|
||||
factory.parse_slice(
|
||||
&self.bytes(),
|
||||
&SingularResolver::from_mentionable(self).robust(),
|
||||
&SingularResolver::from_mentionable(self).into_rc(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user