try_drop/handlers/common/
shim.rs1use crate::handlers::on_uninit::OnUninit;
2
3mod private {
4 pub trait Sealed {}
5}
6#[cfg(any(feature = "ds-write", feature = "ds-panic"))]
7mod use_default {
8 use super::private;
9 use crate::handlers::common::shim::OnUninitShim;
10 use crate::handlers::common::{Fallback, Handler, Primary};
11 use once_cell::sync::Lazy;
12 use std::marker::PhantomData;
13
14 #[cfg_attr(
15 feature = "derives",
16 derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)
17 )]
18 pub struct UseDefaultOnUninitShim<H: Handler>(PhantomData<H>);
19
20 #[cfg(feature = "ds-write")]
21 impl OnUninitShim for UseDefaultOnUninitShim<Primary> {
22 type ExtraData = Lazy<crate::drop_strategies::WriteDropStrategy<std::io::Stderr>>;
23 }
24
25 #[cfg(feature = "ds-panic")]
26 impl OnUninitShim for UseDefaultOnUninitShim<Fallback> {
27 type ExtraData = Lazy<crate::drop_strategies::PanicDropStrategy>;
28 }
29
30 impl<H: Handler> private::Sealed for UseDefaultOnUninitShim<H> {}
31}
32
33#[cfg(any(feature = "ds-write", feature = "ds-panic"))]
34pub use use_default::*;
35
36pub trait OnUninitShim: private::Sealed {
37 type ExtraData;
38}
39
40impl<T: OnUninit> OnUninitShim for T {
41 type ExtraData = T::ExtraData;
42}
43impl<T: OnUninit> private::Sealed for T {}