use core::mem::transmute;
use super::{MutSliceParser, Parser, SliceParser};
mod sealed {
pub trait Sealed {}
impl Sealed for &[u8] {}
impl Sealed for &str {}
impl Sealed for &mut &[u8] {}
impl Sealed for &mut &str {}
}
pub trait IntoParser<'de>: self::sealed::Sealed {
type Parser: Parser<'de>;
fn into_parser(self) -> Self::Parser;
}
impl<'de> IntoParser<'de> for &'de [u8] {
type Parser = SliceParser<'de>;
#[inline]
fn into_parser(self) -> Self::Parser {
SliceParser::new(self)
}
}
impl<'de> IntoParser<'de> for &'de str {
type Parser = SliceParser<'de, true>;
#[inline]
fn into_parser(self) -> Self::Parser {
SliceParser::new_utf8(self)
}
}
impl<'a, 'de> IntoParser<'de> for &'a mut &'de [u8] {
type Parser = MutSliceParser<'a, 'de>;
#[inline]
fn into_parser(self) -> Self::Parser {
MutSliceParser::new(self)
}
}
impl<'a, 'de> IntoParser<'de> for &'a mut &'de str {
type Parser = MutSliceParser<'a, 'de, true>;
#[inline]
fn into_parser(self) -> Self::Parser {
unsafe { MutSliceParser::new_utf8(transmute::<Self, &'a mut &'de [u8]>(self)) }
}
}