Diffstat (limited to 'src/build.rs')
| -rw-r--r-- | src/build.rs | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/src/build.rs b/src/build.rs index ebea4ff..72f395d 100644 --- a/src/build.rs +++ b/src/build.rs @@ -1,4 +1,4 @@ -// pub mod builders; +pub mod builders; use crate::{ protocol::{AnyTraitSendObj as _, Effect, SyncEffect, Visitor}, @@ -89,21 +89,21 @@ pub enum BuildError<B, W> { // // builder.build().map_err(BuildError::Builder) // } -// -// pub fn build_with<'ctx, B: Builder<'ctx, SyncEffect>, W: for<'a> Walker<'a, 'ctx, Effect = SyncEffect>>( -// walker: W, -// ) -> Result<B::Value, BuildError<B::Error, W::Error>> -// where -// <B as Builder<'ctx, SyncEffect>>::Seed: Default, -// { -// let mut builder = B::from_seed(Default::default()); -// -// if let core::ops::ControlFlow::Break(err) = walker.walk(builder.as_visitor().as_obj_mut()) { -// return Err(BuildError::Walker(err)); -// } -// -// builder.build().map_err(BuildError::Builder) -// } + +pub fn build_with<'ctx, B: Builder<'ctx, SyncEffect>, W: Walker<'ctx, Effect = SyncEffect>>( + walker: W, +) -> Result<B::Value, BuildError<B::Error, W::Error>> +where + <B as Builder<'ctx, SyncEffect>>::Seed: Default, +{ + let mut builder = B::from_seed(Default::default()); + + if let core::ops::ControlFlow::Break(err) = walker.walk(builder.as_visitor().as_obj_mut()) { + return Err(BuildError::Walker(err)); + } + + builder.build().map_err(BuildError::Builder) +} // #[cfg(feature = "alloc")] // use crate::protocol::AsyncEffect; |