1use super::*;
2use core::mem::transmute_copy;
3
4#[doc(hidden)]
5pub enum ParamValue<T: Type<T>> {
6 Owned(T),
7 Borrowed(T::Abi),
8}
9
10impl<T: Type<T>> ParamValue<T> {
11 // TODO: replace with `borrow` in windows-bindgen
12 pub fn abi(&self) -> T::Abi {
13 unsafe {
14 match self {
15 Self::Owned(item: &T) => transmute_copy(src:item),
16 Self::Borrowed(borrowed: &::TypeKind>>::Abi) => transmute_copy(src:borrowed),
17 }
18 }
19 }
20
21 pub fn borrow(&self) -> Ref<'_, T> {
22 unsafe { transmute_copy(&self.abi()) }
23 }
24}
25