com/
param.rs

1use crate::AbiTransferable;
2
3/// A COM method parameter used to accept either a reference or value.
4pub enum Param<'a, T> {
5    /// The borrowed version of the param
6    Borrowed(&'a T),
7    /// The owned version of the param
8    Owned(T),
9}
10
11impl<'a, T: AbiTransferable> Param<'a, T> {
12    /// Get the param's underlying ABI
13    pub fn get_abi(&mut self) -> T::Abi {
14        match self {
15            Param::Borrowed(value) => value.get_abi(),
16            Param::Owned(value) => value.get_abi(),
17        }
18    }
19}
20
21impl<'a, T> From<T> for Param<'a, T> {
22    fn from(value: T) -> Param<'a, T> {
23        Param::Owned(value)
24    }
25}
26
27impl<'a, T> From<&'a T> for Param<'a, T> {
28    fn from(value: &'a T) -> Param<'a, T> {
29        Param::Borrowed(value)
30    }
31}
32
33impl<'a, T> From<&'a T> for Param<'a, *const T> {
34    fn from(value: &'a T) -> Param<'a, *const T> {
35        Param::Owned(value)
36    }
37}
38
39impl<'a, T> From<*mut T> for Param<'a, *const T> {
40    fn from(value: *mut T) -> Param<'a, *const T> {
41        Param::Owned(value)
42    }
43}
44
45impl<'a, T> From<&'a mut T> for Param<'a, *mut T> {
46    fn from(value: &'a mut T) -> Param<'a, *mut T> {
47        Param::Owned(value)
48    }
49}