Diffstat (limited to 'src/build.rs')
| -rw-r--r-- | src/build.rs | 45 |
1 files changed, 8 insertions, 37 deletions
diff --git a/src/build.rs b/src/build.rs index 6342309..d4dc676 100644 --- a/src/build.rs +++ b/src/build.rs @@ -1,46 +1,15 @@ -use crate::{UniError, Visitor, WalkStatus, Walker}; +use crate::Visitor; /// A type buildable from a walker. -pub trait Build<'value, 'ctx: 'value, WalkerErr>: Sized { +pub trait Build<'value, 'ctx>: Sized { type Error; /// The builder that can be used to build a value. - type Builder: Builder<'value, 'ctx, WalkerErr, Value = Self, Error = Self::Error>; + type Builder: Builder<'value, 'ctx, Value = Self, Error = Self::Error>; } -// /// Build a [`Buildable`] type from a walker. -// /// -// /// This calls [`Walker::walk`] on the walker. -// pub fn build< -// 'value, -// 'ctx: 'value, -// T: Build<'value, 'ctx, W::Error, Error = VisitorErr>, -// VisitorErr, -// W: ?Sized + Walker<'value, 'ctx, VisitorErr>, -// >( -// walker: &mut W, -// ) -> Result<(T, WalkStatus), UniError<W::Error, VisitorErr>> { -// T::Builder::build(walker) -// } -// -// pub trait BuilderExt<'value, 'ctx: 'value, WalkerErr>: Builder<'value, 'ctx, WalkerErr> { -// fn build<W: ?Sized + Walker<'value, 'ctx, Self::Error, Error = WalkerErr>>( -// walker: &mut W, -// ) -> Result<(Self::Value, WalkStatus), UniError<WalkerErr, Self::Error>>; -// } -// -// impl<'value, 'ctx: 'value, WalkerErr, T: Builder<'value, 'ctx, WalkerErr>> BuilderExt<'value, 'ctx, WalkerErr> for T { -// fn build<W: ?Sized + Walker<'value, 'ctx, Self::Error, Error = WalkerErr>>( -// walker: &mut W, -// ) -> Result<(Self::Value, WalkStatus), UniError<WalkerErr, Self::Error>> { -// let mut builder = Self::init(); -// let status = walker.walk(builder.as_visitor())?; -// Ok((builder.finish()?, status)) -// } -// } - /// Extension to [`Visitor`] that allows constructing and finishing the visitor. -pub trait Builder<'value, 'ctx: 'value, WalkerErr> { +pub trait Builder<'value, 'ctx> { type Error; /// Type to be built. @@ -52,10 +21,12 @@ pub trait Builder<'value, 'ctx: 'value, WalkerErr> { Self: Sized; /// As a visitor. - fn as_visitor(&mut self) -> &mut dyn Visitor<'value, 'ctx, WalkerErr, Error = Self::Error>; + fn as_visitor<WalkerErr: 'value>( + &mut self, + ) -> &mut dyn Visitor<'value, 'ctx, WalkerErr, Error = Self::Error>; /// Finish the value. - fn finish(self) -> Result<Self::Value, UniError<WalkerErr, Self::Error>> + fn finish(self) -> Result<Self::Value, Self::Error> where Self: Sized; } |