use crate::__rt::{BinaryDecode, BinaryEncode, EncodeTypeDef};
use core::ops::Deref;
use super::{FromWasmAbi, IntoWasmAbi};
impl<T: BinaryEncode + EncodeTypeDef> IntoWasmAbi for alloc::vec::Vec<T> {}
impl<T: BinaryDecode + EncodeTypeDef> FromWasmAbi for alloc::vec::Vec<T> {}
impl<T: BinaryEncode + EncodeTypeDef> IntoWasmAbi for alloc::boxed::Box<[T]> {}
impl<T: BinaryDecode + EncodeTypeDef> FromWasmAbi for alloc::boxed::Box<[T]> {}
pub struct RefArg<T: ?Sized>(core::marker::PhantomData<T>);
impl<T: EncodeTypeDef + ?Sized> EncodeTypeDef for RefArg<T> {
fn encode_type_def(type_def: &mut crate::__rt::TypeDef) {
match crate::__rt::TypeDef::rust_value_class_name::<T>() {
Some(class_name) => type_def.rust_borrow(&class_name),
None => type_def.borrowed_ref(),
}
}
}
pub struct OwnedArgAnchor<T> {
value: T,
}
impl<T> OwnedArgAnchor<T> {
#[doc(hidden)]
pub fn from_value(value: T) -> Self {
OwnedArgAnchor { value }
}
}
impl<T> Deref for OwnedArgAnchor<T> {
type Target = T;
fn deref(&self) -> &T {
&self.value
}
}
impl<T> core::ops::DerefMut for OwnedArgAnchor<T> {
fn deref_mut(&mut self) -> &mut T {
&mut self.value
}
}
pub struct RefMutArg<T: ?Sized>(core::marker::PhantomData<T>);
impl<T: EncodeTypeDef + ?Sized> EncodeTypeDef for RefMutArg<T> {
fn encode_type_def(type_def: &mut crate::__rt::TypeDef) {
match crate::__rt::TypeDef::rust_value_class_name::<T>() {
Some(class_name) => type_def.rust_borrow(&class_name),
None => T::encode_type_def(type_def),
}
}
}