use super::*;
pub trait SealedString: Deref + TryConvertFrom<Box<[u8]>> {
fn as_u8(s: &Self::Target) -> &[u8];
fn handle_error_as_io(e: Self::Error) -> io::Error;
}
pub trait TryConvertFrom<Input>: Sized {
type Error: Sized + From<NoError>
+ From<Self::Error>
+ std::error::Error
+ Send
+ Sync
+ 'static;
fn try_convert_from(v: Input, f: &str) -> Result<Self, Self::Error>;
}
#[derive(Error, Debug)]
pub enum NoError {}
#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
pub struct NonExhaustive {}
pub struct SealedData<'r>(pub(crate) &'r mock::Data);
pub trait SealedProvider {
fn with_mocks<R>(&self, f: impl FnOnce(SealedData) -> R) -> Option<R>;
}
impl SealedProvider for generic::PwdGrp {
#[inline]
fn with_mocks<R>(&self, _: impl FnOnce(SealedData) -> R) -> Option<R> {
None
}
}
impl SealedString for Box<[u8]> {
fn as_u8(s: &Self::Target) -> &[u8] {
s
}
fn handle_error_as_io(e: Self::Error) -> io::Error {
match e {}
}
}
impl SealedString for String {
fn as_u8(s: &Self::Target) -> &[u8] {
s.as_bytes()
}
fn handle_error_as_io(e: Self::Error) -> io::Error {
e.into()
}
}
impl SealedString for Vec<u8> {
fn as_u8(s: &Self::Target) -> &[u8] {
s
}
fn handle_error_as_io(e: Self::Error) -> io::Error {
match e {}
}
}
impl SealedString for Box<str> {
fn as_u8(s: &Self::Target) -> &[u8] {
s.as_bytes()
}
fn handle_error_as_io(e: Self::Error) -> io::Error {
e.into()
}
}