Diffstat (limited to 'src/build.rs')
-rw-r--r--src/build.rs29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/build.rs b/src/build.rs
index b0b5750..0322c6a 100644
--- a/src/build.rs
+++ b/src/build.rs
@@ -1,24 +1,41 @@
-pub mod builders;
-pub mod protocols;
+// pub mod builders;
+// pub mod protocols;
use crate::protocol::Implementer;
-/// A type buildable from a walker.
+/// A buildable type.
pub trait Build<'ctx>: Sized {
- /// The builder that can be used to build a value.
+ /// The builder that can be used to build a value of `Self`.
type Builder: Builder<'ctx, Value = Self>;
}
-/// Extension to [`Visitor`] that allows constructing and finishing the visitor.
+/// Builder for a type.
+///
+/// The `'ctx` lifetime is some lifetime that is longer than the walker.
+/// As such, the built value can borrow from other data with a `'ctx` lifetimes.
+///
+/// A builder allows creating a value of a type [`Self::Value`].
+/// The way to use a builder is as follows.
+/// - Call [`Default::default()`] to create an instance of the builder.
+/// - Call [`Self::as_visitor()`] and give it to a walker's [`walk()`][crate::walk::Walker::walk]. The walker will then fill
+/// the builder with data from it's walk.
+/// - Call [`Self::build()`] to finish building the value and get any errors
+/// that happened during filling it with data.
pub trait Builder<'ctx>: Default {
+ /// Error that can happen during filling the builder with data.
type Error;
/// Type to be built.
type Value;
- /// As a visitor.
+ /// Get the builder as a visitor that a walker can use.
+ ///
+ /// This is expected to just be `self`.
fn as_visitor(&mut self) -> &mut dyn Implementer<'ctx>;
/// Finish the value.
+ ///
+ /// If an error happened with the builder during the walk
+ /// it will be reported here.
fn build(self) -> Result<Self::Value, Self::Error>;
}