abi_stable/
erased_types.rs

1//! Types and traits related to type erasure.
2
3use std::{
4    cmp::{Eq, Ord, Ordering, PartialEq, PartialOrd},
5    fmt::{Debug, Display},
6    hash::{Hash, Hasher},
7};
8
9use serde::{Serialize, Serializer};
10
11use crate::{
12    std_types::{
13        RBoxError, RCmpOrdering, RErr, ROk, ROption, RResult, RSlice, RSliceMut, RStr, RString,
14    },
15    traits::{IntoReprC, IntoReprRust},
16};
17
18#[macro_use]
19mod enabled_traits_macro;
20
21pub(crate) mod c_functions;
22
23/// Types that implement `InterfaceType`, used in examples.
24pub mod interfaces;
25
26pub mod trait_objects;
27
28pub(crate) mod type_info;
29
30pub(crate) mod iterator;
31
32pub(crate) mod dyn_trait;
33
34#[macro_use]
35pub(crate) mod vtable;
36
37pub(crate) mod traits;
38
39#[doc(inline)]
40pub use crate::DynTrait;
41
42pub use self::{
43    dyn_trait::UneraseError,
44    traits::{
45        DeserializeDyn, InterfaceType, IteratorItem, IteratorItemOrDefault, SerializeProxyType,
46        SerializeType,
47    },
48    type_info::TypeInfo,
49    vtable::{MakeRequiredTraits, RequiredTraits},
50};
51
52pub use self::vtable::MakeVTable;
53pub use self::vtable::VTable_Ref;
54
55#[doc(no_inline)]
56pub use crate::type_level::downcasting::{TD_CanDowncast, TD_Opaque};
57
58/// The formatting mode for all std::fmt formatters.
59///
60/// For Display,"{}" is Default_ "{:#}" is Alternate
61///
62/// For Debug,"{:?}" is Default_ "{:#?}" is Alternate
63///
64/// etc.
65#[doc(hidden)]
66#[repr(u8)]
67#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, StableAbi)]
68pub enum FormattingMode {
69    Default_,
70    Alternate,
71}