18325e1ecSAlex Crichton use crate::error::OutOfMemory; 2233f1875SNick Fitzgerald 3233f1875SNick Fitzgerald /// Helper function to invoke `<T as TryNew>::try_new`. 4233f1875SNick Fitzgerald /// 5233f1875SNick Fitzgerald /// # Example 6233f1875SNick Fitzgerald /// 7233f1875SNick Fitzgerald /// ``` 8233f1875SNick Fitzgerald /// # use wasmtime_internal_core::alloc::*; 98325e1ecSAlex Crichton /// # use wasmtime_internal_core::error::Result; 10233f1875SNick Fitzgerald /// # fn _foo() -> Result<()> { 11233f1875SNick Fitzgerald /// let boxed = try_new::<Box<u32>>(36)?; 12233f1875SNick Fitzgerald /// assert_eq!(*boxed, 36); 13233f1875SNick Fitzgerald /// # Ok(()) 14233f1875SNick Fitzgerald /// # } 15233f1875SNick Fitzgerald /// ``` 16233f1875SNick Fitzgerald #[inline] try_new<T>(value: T::Value) -> Result<T, OutOfMemory> where T: TryNew,17233f1875SNick Fitzgeraldpub fn try_new<T>(value: T::Value) -> Result<T, OutOfMemory> 18233f1875SNick Fitzgerald where 19233f1875SNick Fitzgerald T: TryNew, 20233f1875SNick Fitzgerald { 21233f1875SNick Fitzgerald TryNew::try_new(value) 22233f1875SNick Fitzgerald } 23233f1875SNick Fitzgerald 24233f1875SNick Fitzgerald /// Extension trait providing fallible allocation for types like `Arc<T>` and 25*bc4582c3SAlex Crichton /// `Box<T>`. 26233f1875SNick Fitzgerald pub trait TryNew { 27233f1875SNick Fitzgerald /// The inner `T` type that is getting wrapped into an `Arc<T>` or `Box<T>`. 28233f1875SNick Fitzgerald type Value; 29233f1875SNick Fitzgerald 30233f1875SNick Fitzgerald /// Allocate a new `Self`, returning `Err(OutOfMemory)` on allocation 31233f1875SNick Fitzgerald /// failure. try_new(value: Self::Value) -> Result<Self, OutOfMemory> where Self: Sized32233f1875SNick Fitzgerald fn try_new(value: Self::Value) -> Result<Self, OutOfMemory> 33233f1875SNick Fitzgerald where 34233f1875SNick Fitzgerald Self: Sized; 35233f1875SNick Fitzgerald } 36