Diffstat (limited to 'src/transform.rs')
-rw-r--r--src/transform.rs35
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)
}