Diffstat (limited to 'src/transform.rs')
| -rw-r--r-- | src/transform.rs | 35 |
1 files changed, 7 insertions, 28 deletions
diff --git a/src/transform.rs b/src/transform.rs index 325b9ec..5fbcb79 100644 --- a/src/transform.rs +++ b/src/transform.rs @@ -1,6 +1,7 @@ use crate::{ build::{Build, Builder}, - walk::{Walk, WalkMut, WalkOnce}, + walk::Walk, + Walker, }; #[derive(thiserror::Error, Debug)] @@ -14,36 +15,14 @@ pub enum Either<A, B> { pub fn from<'ctx, U, T>( value: T, -) -> Result<U, Either<T::Error, <U::Builder as Builder<'ctx>>::Error>> +) -> Result<U, Either<<T::Walker as Walker<'ctx>>::Error, <U::Builder as Builder<'ctx>>::Error>> where - T: WalkOnce<'ctx>, + T: Walk<'ctx>, U: Build<'ctx>, { let mut builder = U::Builder::default(); - value.walk_once(builder.as_visitor()).map_err(Either::A)?; - builder.build().map_err(Either::B) -} - -pub fn from_mut<'a, 'ctx, U, T>( - value: &'a mut T, -) -> Result<U, Either<T::Error, <U::Builder as Builder<'ctx>>::Error>> -where - T: WalkMut<'a, 'ctx>, - U: Build<'ctx>, -{ - let mut builder = U::Builder::default(); - value.walk_mut(builder.as_visitor()).map_err(Either::A)?; - builder.build().map_err(Either::B) -} - -pub fn from_ref<'a, 'ctx, U, T>( - value: &'a T, -) -> Result<U, Either<T::Error, <U::Builder as Builder<'ctx>>::Error>> -where - T: Walk<'a, 'ctx>, - U: Build<'ctx>, -{ - let mut builder = U::Builder::default(); - value.walk(builder.as_visitor()).map_err(Either::A)?; + T::Walker::from(value) + .walk(builder.as_visitor()) + .map_err(Either::A)?; builder.build().map_err(Either::B) } |