try-drop 0.2.0

Batteries included error handling mechanisms for drops which can fail
Documentation
use crate::handlers::on_uninit::OnUninit;

mod private {
    pub trait Sealed {}
}
#[cfg(any(feature = "ds-write", feature = "ds-panic"))]
mod use_default {
    use super::private;
    use crate::handlers::common::shim::OnUninitShim;
    use crate::handlers::common::{Fallback, Handler, Primary};
    use once_cell::sync::Lazy;
    use std::marker::PhantomData;

    #[cfg_attr(
        feature = "derives",
        derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)
    )]
    pub struct UseDefaultOnUninitShim<H: Handler>(PhantomData<H>);

    #[cfg(feature = "ds-write")]
    impl OnUninitShim for UseDefaultOnUninitShim<Primary> {
        type ExtraData = Lazy<crate::drop_strategies::WriteDropStrategy<std::io::Stderr>>;
    }

    #[cfg(feature = "ds-panic")]
    impl OnUninitShim for UseDefaultOnUninitShim<Fallback> {
        type ExtraData = Lazy<crate::drop_strategies::PanicDropStrategy>;
    }

    impl<H: Handler> private::Sealed for UseDefaultOnUninitShim<H> {}
}

#[cfg(any(feature = "ds-write", feature = "ds-panic"))]
pub use use_default::*;

pub trait OnUninitShim: private::Sealed {
    type ExtraData;
}

impl<T: OnUninit> OnUninitShim for T {
    type ExtraData = T::ExtraData;
}
impl<T: OnUninit> private::Sealed for T {}