use crate::{walk::{Walk, WalkOnce, WalkMut}, protocol::VisitorMissingProtocol, Walker, Visitor};
use super::{reference::RefWalker, reference_mut::MutWalker};
impl<'ctx> WalkOnce<'ctx> for &'ctx str {
type Error = VisitorMissingProtocol;
type Value = ();
#[inline]
fn walk_once(self, visitor: &mut dyn Visitor<'ctx>) -> Result<Self::Value, Self::Error> {
self.walk(visitor)
}
}
impl<'borrow, 'ctx> WalkMut<'borrow, 'ctx> for &'ctx str {
#[inline]
fn walk_mut(&'borrow mut self, visitor: &mut dyn Visitor<'ctx>) -> Result<Self::Value, Self::Error> {
self.walk(visitor)
}
}
impl<'borrow, 'ctx> Walk<'borrow, 'ctx> for &'ctx str {
#[inline]
fn walk(&'borrow self, visitor: &mut dyn Visitor<'ctx>) -> Result<Self::Value, Self::Error> {
let mut walker = RefWalker::new(*self);
let _ = walker.walk(visitor);
match walker.into_error() {
Some(err) => Err(err),
None => Ok(()),
}
}
}
impl<'ctx> WalkOnce<'ctx> for &'ctx mut str {
type Error = VisitorMissingProtocol;
type Value = ();
#[inline]
fn walk_once(self, visitor: &mut dyn Visitor<'ctx>) -> Result<Self::Value, Self::Error> {
let mut walker = MutWalker::new(self);
let _ = walker.walk(visitor);
match walker.into_error() {
Some(err) => Err(err),
None => Ok(()),
}
}
}
impl<'ctx> WalkMut<'ctx, 'ctx> for &'ctx mut str {
#[inline]
fn walk_mut(&'ctx mut self, visitor: &mut dyn Visitor<'ctx>) -> Result<Self::Value, Self::Error> {
let mut walker = MutWalker::new(*self);
let _ = walker.walk(visitor);
match walker.into_error() {
Some(err) => Err(err),
None => Ok(()),
}
}
}
impl<'ctx> Walk<'ctx, 'ctx> for &'ctx mut str {
#[inline]
fn walk(&'ctx self, visitor: &mut dyn Visitor<'ctx>) -> Result<Self::Value, Self::Error> {
let mut walker = RefWalker::new(*self);
let _ = walker.walk(visitor);
match walker.into_error() {
Some(err) => Err(err),
None => Ok(()),
}
}
}