use crate::{FallibleLend, FallibleLender, Lend, Lender};
pub trait FromLender<L: IntoLender>: Sized {
fn from_lender(lender: L) -> Self;
}
pub trait FromFallibleLender<L: IntoFallibleLender>: Sized {
fn from_fallible_lender(lender: L) -> Result<Self, L::Error>;
}
pub trait IntoLender {
type Lender: Lender;
fn into_lender(self) -> <Self as IntoLender>::Lender;
}
impl<L: Lender> IntoLender for L {
type Lender = L;
#[inline(always)]
fn into_lender(self) -> L {
self
}
}
pub trait ExtendLender<L: IntoLender> {
fn extend_lender(&mut self, lender: L);
fn extend_lender_one(&mut self, item: Lend<'_, L::Lender>);
#[inline(always)]
fn extend_lender_reserve(&mut self, additional: usize) {
let _ = additional;
}
}
pub trait ExtendFallibleLender<L: IntoFallibleLender> {
fn extend_fallible_lender(&mut self, lender: L) -> Result<(), L::Error>;
fn extend_fallible_lender_one(&mut self, item: FallibleLend<'_, L::FallibleLender>);
#[inline(always)]
fn extend_fallible_lender_reserve(&mut self, additional: usize) {
let _ = additional;
}
}
pub trait IntoFallibleLender {
type Error;
type FallibleLender: FallibleLender<Error = Self::Error>;
fn into_fallible_lender(self) -> Self::FallibleLender;
}
impl<L: FallibleLender> IntoFallibleLender for L {
type Error = L::Error;
type FallibleLender = L;
#[inline(always)]
fn into_fallible_lender(self) -> L {
self
}
}