• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // This file is part of ICU4X. For terms of use, please see the file
2 // called LICENSE at the top level of the ICU4X source tree
3 // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
4 
5 //! This module contains helper types for erasing Cart types.
6 //!
7 //! See the docs of [`Yoke::erase_rc_cart()`](crate::Yoke::erase_rc_cart)
8 //! and [`Yoke::erase_box_cart()`](crate::Yoke::erase_box_cart) for more info.
9 //!
10 //! ✨ *Enabled with the `alloc` Cargo feature.*
11 
12 use alloc::boxed::Box;
13 use alloc::rc::Rc;
14 use alloc::sync::Arc;
15 
16 /// Dummy trait that lets us `dyn Drop`
17 ///
18 /// `dyn Drop` isn't legal (and doesn't make sense since `Drop` is not
19 /// implement on all destructible types). However, all trait objects come with
20 /// a destructor, so we can just use an empty trait to get a destructor object.
21 pub trait ErasedDestructor: 'static {}
22 impl<T: 'static> ErasedDestructor for T {}
23 
24 /// A type-erased Cart that has `Arc` semantics
25 ///
26 /// See the docs of [`Yoke::erase_arc_cart()`](crate::Yoke::erase_rc_cart) for more info.
27 ///
28 /// ✨ *Enabled with the `alloc` Cargo feature.*
29 pub type ErasedArcCart = Arc<dyn ErasedDestructor + Send + Sync>;
30 /// A type-erased Cart that has `Rc` semantics
31 ///
32 /// See the docs of [`Yoke::erase_rc_cart()`](crate::Yoke::erase_rc_cart) for more info.
33 ///
34 /// ✨ *Enabled with the `alloc` Cargo feature.*
35 pub type ErasedRcCart = Rc<dyn ErasedDestructor>;
36 /// A type-erased Cart that has `Box` semantics
37 ///
38 /// See the docs of [`Yoke::erase_box_cart()`](crate::Yoke::erase_box_cart) for more info.
39 ///
40 /// ✨ *Enabled with the `alloc` Cargo feature.*
41 pub type ErasedBoxCart = Box<dyn ErasedDestructor>;
42