Crate eso[][src]

Expand description

Crates.io docs.rs GitHub issues GitHub pull requests GitHub last commit Crates.io

Type-level machinery for building Cow-like types while avoiding unnecessary copies of `‘static’ or other shareable references.

The main feature of this crate is the Eso type, which tracks whether the contained value is ephemeral (i.e. borrowed with any lifetime), static/shared (i.e. can be held on to indefinitely) or owned (i.e. can be moved and may be mutably accessed).

In addition, it also statically tracks which of these is possible at any given point in the code by encoding the information on a type level using the definitions in the maybe module.

While Eso is perfectly happy working with normal Rust references, it also provides an abstraction to support a more generalized notion of reference. The definitions in the borrow module describe the different operations that are required to use generalized references.

Re-exports

pub use crate::eso::t;
pub use crate::eso::x;

Modules

borrow

The Ownable and Borrowable traits abstract over the duality between owned and borrowed types, much in the same way as the standard-library Borrow and ToOwned traits do.

eso

The Eso type and associated traits for advanced reference wrangling.

maybe

The Maybe trait and its two implementations An and No describe a compile-time optional value.

unify

Structs

An

A value of type A that exists.

No

A value of type A that cannot exist.

Enums

Eso

A three-way choice between an Ephemeral reference (i.e. with a lifetime that is not 'static), a Static reference and an Owned value.