diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:25 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:25 +0000 |
commit | 5363f350887b1e5b5dd21a86f88c8af9d7fea6da (patch) | |
tree | 35ca005eb6e0e9a1ba3bb5dbc033209ad445dc17 /vendor/yoke/src/erased.rs | |
parent | Adding debian version 1.66.0+dfsg1-1. (diff) | |
download | rustc-5363f350887b1e5b5dd21a86f88c8af9d7fea6da.tar.xz rustc-5363f350887b1e5b5dd21a86f88c8af9d7fea6da.zip |
Merging upstream version 1.67.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/yoke/src/erased.rs')
-rw-r--r-- | vendor/yoke/src/erased.rs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/vendor/yoke/src/erased.rs b/vendor/yoke/src/erased.rs new file mode 100644 index 000000000..c314d5186 --- /dev/null +++ b/vendor/yoke/src/erased.rs @@ -0,0 +1,41 @@ +// This file is part of ICU4X. For terms of use, please see the file +// called LICENSE at the top level of the ICU4X source tree +// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). + +//! This module contains helper types for erasing Cart types. +//! +//! See the docs of [`Yoke::erase_rc_cart()`](crate::Yoke::erase_rc_cart) +//! and [`Yoke::erase_box_cart()`](crate::Yoke::erase_box_cart) for more info. +//! +//! Available with the `"alloc"` feature enabled. + +use alloc::boxed::Box; +use alloc::rc::Rc; +use alloc::sync::Arc; + +/// Dummy trait that lets us `dyn Drop` +/// +/// `dyn Drop` isn't legal (and doesn't make sense since `Drop` is not +/// implement on all destructible types). However, all trait objects come with +/// a destructor, so we can just use an empty trait to get a destructor object. +pub trait ErasedDestructor: 'static {} +impl<T: 'static> ErasedDestructor for T {} + +/// A type-erased Cart that has `Arc` semantics +/// +/// See the docs of [`Yoke::erase_arc_cart()`](crate::Yoke::erase_rc_cart) for more info. +/// +/// Available with the `"alloc"` feature enabled. +pub type ErasedArcCart = Arc<dyn ErasedDestructor + Send + Sync>; +/// A type-erased Cart that has `Rc` semantics +/// +/// See the docs of [`Yoke::erase_rc_cart()`](crate::Yoke::erase_rc_cart) for more info. +/// +/// Available with the `"alloc"` feature enabled. +pub type ErasedRcCart = Rc<dyn ErasedDestructor>; +/// A type-erased Cart that has `Box` semantics +/// +/// See the docs of [`Yoke::erase_box_cart()`](crate::Yoke::erase_box_cart) for more info. +/// +/// Available with the `"alloc"` feature enabled. +pub type ErasedBoxCart = Box<dyn ErasedDestructor>; |