use crate::primitives::Bool;
use crate::trie::{Capability, InsertAt};
use crate::primitives::stream::D0;
pub trait AutoCapSet {
type Out;
}
pub type Cap<T> = <T as AutoCapSet>::Out;
pub trait InsertIf<Cap, const B: bool> {
type Out;
}
impl<S, Cap> InsertIf<Cap, true> for S
where
Cap: Capability,
S: InsertAt<Cap, D0>,
{
type Out = <S as InsertAt<Cap, D0>>::Out;
}
impl<S, Cap> InsertIf<Cap, false> for S {
type Out = S;
}
pub trait InsertIfType<Cap, B: Bool> {
type Out;
}
impl<S, Cap, B> InsertIfType<Cap, B> for S
where
B: Bool,
S: InsertAt<Cap, D0>,
{
type Out = B::If<<S as InsertAt<Cap, D0>>::Out, S>;
}
macros::define_impl_auto_caps_macro!();
macros::define_impl_std_types_macro!();
#[cfg(feature = "alloc")]
macros::define_impl_alloc_types_macro!();
#[cfg(feature = "std")]
macros::define_impl_std_lib_types_macro!();
impl_std_types!();
#[cfg(feature = "alloc")]
impl_alloc_types!();
#[cfg(feature = "std")]
impl_std_lib_types!();