Diffstat (limited to 'tests/demo.rs')
-rw-r--r--tests/demo.rs40
1 files changed, 22 insertions, 18 deletions
diff --git a/tests/demo.rs b/tests/demo.rs
index 6f3565b..9baf602 100644
--- a/tests/demo.rs
+++ b/tests/demo.rs
@@ -1,9 +1,10 @@
-use std::{any::TypeId, collections::VecDeque, ops::ControlFlow};
+use std::{collections::VecDeque, ops::ControlFlow};
use treaty::{
any::{any_trait, static_wrapper::OwnedStatic},
+ build_with, into_walker,
protocol::{
visitor::{Sequence, SequenceScope, Value},
- Visitor,
+ SyncEffect, Visitor,
},
Builder, Walk, Walker,
};
@@ -16,11 +17,9 @@ fn demo() {
Data::Bool(false),
]);
- let mut builder = JsonLike::default();
- <Data as Walk>::Walker::from(a).walk(builder.as_visitor()).unwrap();
- dbg!(builder.build().unwrap());
+ let s = build_with::<JsonLike, _>(into_walker(a)).unwrap();
- todo!()
+ assert_eq!(s, "[true,[false,true,],false,]");
}
#[derive(Debug)]
@@ -43,37 +42,42 @@ const _: () = {
}
impl<'ctx> Walker<'ctx> for Impl {
+ type Effect = SyncEffect;
+
type Error = ();
type Output = ();
- fn walk(self, visitor: Visitor<'_, 'ctx>) -> Result<Self::Output, Self::Error> {
+ fn walk(
+ self,
+ visitor: &mut Visitor<'ctx>,
+ ) -> core::ops::ControlFlow<Self::Error, Self::Output> {
match self.0 {
Data::Bool(value) => walk_bool(value, visitor),
Data::Sequence(value) => walk_vec(value, visitor),
}
- Ok(())
+ core::ops::ControlFlow::Continue(())
}
}
};
-fn walk_bool(value: bool, visitor: Visitor<'_, '_>) {
+fn walk_bool(value: bool, visitor: &mut Visitor<'_>) {
visitor
.upcast_mut::<dyn Value<OwnedStatic<bool>>>()
.unwrap()
.visit(OwnedStatic(value));
}
-fn walk_vec(value: Vec<Data>, visitor: Visitor<'_, '_>) {
+fn walk_vec(value: Vec<Data>, visitor: &mut Visitor<'_>) {
struct Scope(VecDeque<Data>);
impl<'ctx> SequenceScope<'ctx> for Scope {
fn next(
&mut self,
- visitor: Visitor<'_, 'ctx>,
- ) -> treaty::protocol::ControlFlow<(), treaty::protocol::visitor::Status> {
+ visitor: &mut Visitor<'ctx>,
+ ) -> core::ops::ControlFlow<(), treaty::protocol::visitor::Status> {
if let Some(value) = self.0.pop_front() {
- <<Data as Walk>::Walker>::from(value).walk(visitor).unwrap();
+ into_walker(value).walk(visitor);
ControlFlow::Continue(treaty::protocol::visitor::Status::Continue)
} else {
@@ -98,7 +102,7 @@ impl<'ctx> Builder<'ctx> for JsonLike {
type Value = String;
- fn as_visitor(&mut self) -> Visitor<'_, 'ctx> {
+ fn as_visitor(&mut self) -> &mut Visitor<'ctx> {
self
}
@@ -109,20 +113,20 @@ impl<'ctx> Builder<'ctx> for JsonLike {
any_trait! {
impl['a, 'ctx] JsonLike = [
- dyn Value<OwnedStatic<bool>> + 'a,
+ dyn Value<'a, OwnedStatic<bool>> + 'a,
dyn Sequence<'ctx> + 'a,
];
}
-impl Value<OwnedStatic<bool>> for JsonLike {
- fn visit(&mut self, value: OwnedStatic<bool>) -> treaty::protocol::ControlFlow {
+impl Value<'_, OwnedStatic<bool>> for JsonLike {
+ fn visit(&mut self, value: OwnedStatic<bool>) -> core::ops::ControlFlow<()> {
self.0.push_str(&format!("{}", value.0));
ControlFlow::Continue(())
}
}
impl<'ctx> Sequence<'ctx> for JsonLike {
- fn visit(&mut self, scope: &mut dyn SequenceScope<'ctx>) -> treaty::protocol::ControlFlow {
+ fn visit(&mut self, scope: &mut dyn SequenceScope<'ctx>) -> core::ops::ControlFlow<()> {
self.0.push_str("[");
while let ControlFlow::Continue(treaty::protocol::visitor::Status::Continue) =
scope.next(self)