try_drop/handlers/
on_uninit.rs

1//! Types and traits on what to do when the global, thread local, or shim drop strategies is
2//! uninitialized.
3mod private {
4    pub trait Sealed {}
5}
6
7#[cfg(any(feature = "ds-write", feature = "ds-panic"))]
8mod use_default {
9    use super::*;
10
11    /// Use the default drop strategy if uninitialized
12    #[cfg_attr(
13        feature = "derives",
14        derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)
15    )]
16    pub enum UseDefaultOnUninit {}
17
18    impl OnUninit for UseDefaultOnUninit {
19        type ExtraData = ();
20    }
21    impl private::Sealed for UseDefaultOnUninit {}
22}
23
24use core::sync::atomic::AtomicBool;
25#[cfg(any(feature = "ds-write", feature = "ds-panic"))]
26pub use use_default::*;
27
28/// What to do when the global, thread local, or shim drop strategies is uninitialized.
29pub trait OnUninit: private::Sealed {
30    /// Any extra data that this type may neee.
31    type ExtraData;
32}
33
34/// Just error on the drop strategy if uninitialized.
35#[cfg_attr(
36    feature = "derives",
37    derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)
38)]
39pub enum ErrorOnUninit {}
40
41impl OnUninit for ErrorOnUninit {
42    type ExtraData = ();
43}
44impl private::Sealed for ErrorOnUninit {}
45
46/// Panic on the drop strategy if uninitialized.
47#[cfg_attr(
48    feature = "derives",
49    derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)
50)]
51pub enum PanicOnUninit {}
52
53impl OnUninit for PanicOnUninit {
54    type ExtraData = ();
55}
56impl private::Sealed for PanicOnUninit {}
57
58/// Does nothing if uninitialized.
59#[cfg_attr(
60    feature = "derives",
61    derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)
62)]
63pub enum DoNothingOnUninit {}
64
65impl OnUninit for DoNothingOnUninit {
66    type ExtraData = ();
67}
68impl private::Sealed for DoNothingOnUninit {}
69
70/// Sets an internal flag if uninitialized.
71#[cfg_attr(
72    feature = "derives",
73    derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)
74)]
75pub enum FlagOnUninit {}
76
77impl OnUninit for FlagOnUninit {
78    type ExtraData = AtomicBool;
79}
80impl private::Sealed for FlagOnUninit {}