add has!, MaybeHas, maybe_has!

This commit is contained in:
🪞👃🪞 2025-05-17 05:47:51 +03:00
parent 4ff4ea8173
commit b25977d878

View file

@ -19,3 +19,26 @@ pub trait Has<T>: Send + Sync {
fn get (&self) -> &T; fn get (&self) -> &T;
fn get_mut (&mut self) -> &mut T; fn get_mut (&mut self) -> &mut T;
} }
#[macro_export] macro_rules! has {
($T:ty: |$self:ident : $S:ty| $x:expr) => {
impl Has<$T> for $S {
fn get (&$self) -> &$T { &$x }
fn get_mut (&mut $self) -> &mut $T { &mut $x }
}
};
}
pub trait MaybeHas<T>: Send + Sync {
fn get (&self) -> Option<&T>;
fn get_mut (&mut self) -> Option<&mut T>;
}
#[macro_export] macro_rules! maybe_has {
($T:ty: |$self:ident : $S:ty| $x:block; $y:block $(;)?) => {
impl MaybeHas<$T> for $S {
fn get (&$self) -> Option<&$T> $x
fn get_mut (&mut $self) -> Option<&mut $T> $y
}
};
}