use core::fmt::{Display, Formatter};
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
pub enum Ownership {
Ref,
Mut,
Owned,
}
impl Display for Ownership {
fn fmt(&self, f: &mut Formatter<'_>) -> core::fmt::Result {
match self {
Self::Ref => write!(f, "reference"),
Self::Mut => write!(f, "mutable reference"),
Self::Owned => write!(f, "owned"),
}
}
}
pub trait GetOwnership {
fn ownership() -> Ownership {
Ownership::Owned
}
}
impl<T> GetOwnership for &'_ T {
fn ownership() -> Ownership {
Ownership::Ref
}
}
impl<T> GetOwnership for &'_ mut T {
fn ownership() -> Ownership {
Ownership::Mut
}
}
macro_rules! impl_get_ownership {
(
$ty: ty
$(;
< $($T: ident $(: $T1: tt $(+ $T2: tt)*)?),* >
)?
$(
[ $(const $N: ident : $size: ident),* ]
)?
$(
where $($U: ty $(: $U1: tt $(+ $U2: tt)*)?),*
)?
) => {
impl <
$($($T $(: $T1 $(+ $T2)*)?),*)?
$(, $(const $N : $size),*)?
> $crate::func::args::GetOwnership for $ty
$(
where $($U $(: $U1 $(+ $U2)*)?),*
)?
{}
};
}
pub(crate) use impl_get_ownership;