use crate::*;
#[doc(hidden)]
pub enum Param<'a, T: Abi> {
Borrowed(&'a T),
Owned(T),
Boxed(T),
None,
}
impl<'a, T: Abi> Param<'a, T> {
pub fn abi(&mut self) -> T::Abi {
match self {
Param::Borrowed(value) => value.abi(),
Param::Owned(value) => value.abi(),
Param::Boxed(value) => value.abi(),
Param::None => unsafe { std::mem::zeroed() },
}
}
}
impl<'a, T: Abi> Drop for Param<'a, T> {
fn drop(&mut self) {
T::drop_param(self);
}
}