//! Wrapper are how *dbstruct* reads and writes to the database. They handle
//! serializing and deserializing, provide the API and determine how to handle
//! missing data.
//!
//! There are two types of wrapper:
//! - Those describing how to handle missing values. These at the minimum offer
//! you `get` and `set`. Depending on the [`traits`][crate::traits::data_store] the
//! database you chose implements they may also support `update` and
//! `conditional_update`.
//! - Wrapper that mimic the API of a standard library type.
pub use DefaultTrait;
pub use DefaultValue;
pub use Map;
pub use OptionValue;
pub use Vec;
pub use VecDeque;
// We need to expose prefixed for the generated
// code to be able to access it
pub use Prefixed as VecPrefixed;
pub use Prefixed as DequePrefixed;
/// Not all wrappers should be sync, negative marker traits are unstable
/// instead we use this.
pub type PhantomUnsync = PhantomData;