Diffstat (limited to 'src/impls/alloc/string.rs')
-rw-r--r--src/impls/alloc/string.rs213
1 files changed, 0 insertions, 213 deletions
diff --git a/src/impls/alloc/string.rs b/src/impls/alloc/string.rs
deleted file mode 100644
index 118eec0..0000000
--- a/src/impls/alloc/string.rs
+++ /dev/null
@@ -1,213 +0,0 @@
-use core::marker::PhantomData;
-
-use ::alloc::string::String;
-
-use crate::{error::{BasicError, UniError}, WalkerHints, protocol::{ProtocolId, AnyHint, Hint, lookup_visit, lookup_hint, AnyVisit, Protocol}, protocols::{str::Str, self}, HintGiven, walk::{WalkOnce, WalkMut, Walk}, build::{Builder, Build}};
-
-macro_rules! impl_walker {
- ($walker:ident) => {
- impl<'value, 'ctx: 'value, VisitorErr: 'ctx> crate::Walker<'value, 'ctx, VisitorErr>
- for $walker<'value, 'ctx>
- {
- type Error = BasicError;
-
- fn hints(&mut self) -> &mut dyn WalkerHints<'value, 'ctx, VisitorErr, Error = Self::Error> {
- self
- }
- }
- }
-}
-
-macro_rules! impl_hints {
- ($walker:ident, [$($protocol:ty),* $(,)?]) => {
- impl<'value, 'ctx: 'value, VisitorErr: 'ctx> WalkerHints<'value, 'ctx, VisitorErr>
- for $walker<'value, 'ctx>
- {
- type Error = BasicError;
-
- fn protocol(
- &mut self,
- id: ProtocolId,
- ) -> Option<AnyHint<'_, 'value, 'ctx, Self::Error, VisitorErr>> {
- match id {
- $(id if id == ProtocolId::of::<$protocol>() => Some(AnyHint::new(self)),)?
- _ => None,
- }
- }
- }
- }
-}
-
-pub struct WalkerOnce<'value, 'ctx: 'value>(String, PhantomData<&'value ()>);
-
-impl_walker!(WalkerOnce);
-
-impl<'value, 'ctx: 'value, VisitorErr: 'ctx> WalkerHints<'value, 'ctx, VisitorErr>
- for WalkerOnce<'value, 'ctx>
-{
- type Error = BasicError;
-
- fn protocol(
- &mut self,
- id: ProtocolId,
- ) -> Option<AnyHint<'_, 'value, 'ctx, Self::Error, VisitorErr>> {
- match id {
- id if id == ProtocolId::of::<Str>() => Some(AnyHint::new(self)),
- _ => None,
- }
- }
-}
-
-impl<'value, 'ctx: 'value, VisitorErr: 'ctx> Hint<'value, 'ctx, Str, VisitorErr>
- for Walker<'value, 'ctx>
-{
- type Error = BasicError;
-
- fn hint(
- &mut self,
- visitor: &mut dyn crate::Visitor<'value, 'ctx, Self::Error, Error = VisitorErr>,
- _hint: <Str as crate::protocol::Protocol<'value, 'ctx>>::Hint,
- ) -> Result<HintGiven, UniError<Self::Error, VisitorErr>> {
- lookup_visit::<Str, _, _>(visitor)
- .map_err(UniError::Walker)?
- .ok_or_else(|| UniError::Walker(BasicError("visitor is missing the str protocol")))?
- .visit(protocols::str::Data::Value(self.0))?;
-
- Ok(HintGiven)
- }
-
- fn known(
- &mut self,
- _hint: &<Str as crate::protocol::Protocol<'value, 'ctx>>::Hint,
- ) -> Result<<Str as crate::protocol::Protocol<'value, 'ctx>>::Known, BasicError> {
- Ok(protocols::str::Known {
- len: Some(self.0.len()),
- kind: Some(protocols::str::Kind::Value),
- })
- }
-}
-
-pub struct WalkerMut<'value, 'ctx: 'value>(&'value mut String, PhantomData<&'ctx ()>);
-pub struct WalkerRef<'value, 'ctx: 'value>(&'value String, PhantomData<&'ctx ()>);
-
-impl<'value, 'ctx: 'value, VisitorErr: 'ctx> WalkOnce<'value, 'ctx, VisitorErr> for &'ctx str {
- type Error = BasicError;
- type Walker = Walker<'value, 'ctx>;
-
- fn into_walker(self) -> Self::Walker {
- Walker(self, PhantomData)
- }
-}
-
-impl<'value, 'ctx: 'value, VisitorErr: 'ctx> WalkMut<'value, 'ctx, VisitorErr> for &'ctx str {
- type ErrorMut = BasicError;
- type WalkerMut = Walker<'value, 'ctx>;
-
- fn walker_mut(&'value mut self) -> Self::Walker {
- Walker(self, PhantomData)
- }
-}
-
-impl<'value, 'ctx: 'value, VisitorErr: 'ctx> Walk<'value, 'ctx, VisitorErr> for &'ctx str {
- type ErrorRef = BasicError;
- type WalkerRef = Walker<'value, 'ctx>;
-
- fn walker_ref(&'value self) -> Self::Walker {
- Walker(self, PhantomData)
- }
-}
-
-pub struct Visitor<'value>(Option<&'value str>);
-
-impl<'value, 'ctx: 'value, WalkerErr: 'value> crate::Visitor<'value, 'ctx, WalkerErr>
- for Visitor<'value>
-{
- type Error = BasicError;
-
- fn request_hint(
- &mut self,
- hints: &mut dyn WalkerHints<'value, 'ctx, BasicError, Error = WalkerErr>,
- ) -> Result<Option<HintGiven>, UniError<WalkerErr, BasicError>> {
- if let Some(hint) = lookup_hint::<Str, _, _>(hints).map_err(UniError::Visitor)? {
- Ok(Some(hint.hint(
- self,
- protocols::str::Hint {
- kind: Some(protocols::str::Kind::Value),
- min_len: None,
- max_len: None,
- },
- )?))
- } else {
- Ok(None)
- }
- }
-
- fn protocol(
- &mut self,
- id: ProtocolId,
- ) -> Option<AnyVisit<'_, 'value, 'ctx, WalkerErr, BasicError>> {
- match id {
- id if id == ProtocolId::of::<Str>() => Some(AnyVisit::new(self)),
- _ => None,
- }
- }
-}
-
-impl<'value, 'ctx: 'value, WalkerErr: 'value> crate::Visit<'value, 'ctx, Str, WalkerErr>
- for Visitor<'value>
-{
- type Error = BasicError;
-
- fn visit<'walking>(
- &'walking mut self,
- accessor: <Str as Protocol<'value, 'ctx>>::Accessor<'walking, WalkerErr, BasicError>,
- ) -> Result<(), UniError<WalkerErr, BasicError>> {
- match accessor {
- protocols::str::Data::Value(str)
- | protocols::str::Data::Context(str)
- | protocols::str::Data::Static(str) => self.0 = Some(str),
- protocols::str::Data::Walking(_) => {
- return Err(UniError::Visitor(BasicError(
- "str doesn't live long enough",
- )))
- }
- }
- Ok(())
- }
-}
-
-impl<'value, 'ctx: 'value, WalkerErr: 'value> Builder<'value, 'ctx, WalkerErr> for Visitor<'value> {
- type Error = BasicError;
-
- type Value = &'value str;
-
- fn init() -> Self
- where
- Self: Sized,
- {
- Visitor(None)
- }
-
- fn as_visitor(
- &mut self,
- ) -> &mut dyn crate::Visitor<'value, 'ctx, WalkerErr, Error = Self::Error> {
- self
- }
-
- fn finish(self) -> Result<Self::Value, UniError<WalkerErr, Self::Error>>
- where
- Self: Sized,
- {
- if let Some(str) = self.0 {
- Ok(str)
- } else {
- Err(UniError::Visitor(BasicError("missing str")))
- }
- }
-}
-
-impl<'value, 'ctx: 'value, WalkerErr: 'value> Build<'value, 'ctx, WalkerErr> for &'value str {
- type Error = BasicError;
-
- type Builder = Visitor<'value>;
-}