try_drop/handlers/common/
shim.rs

1use 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 {}