Enum managed::Managed [] [src]

pub enum Managed<'a, T: 'a + ?Sized> {
    Borrowed(&'a mut T),
    Owned(Box<T>),
}

A managed object.

This enum can be used to represent exclusive access to objects. In Rust, exclusive access to an object is obtained by either owning the object, or owning a mutable pointer to the object; hence, "managed".

The purpose of this enum is providing good ergonomics with std present while making it possible to avoid having a heap at all (which of course means that std is not present). To achieve this, the variants other than Borrow are only available when the corresponding feature is opted in.

A function that requires a managed object should be generic over an Into<Managed<'a, T>> argument; then, it will be possible to pass either a Box<T>, Vec<T>, or a &'a mut T without any conversion at the call site.

Note that a Vec<T> converted into an Into<Managed<'static, [T]>> gets transformed into a boxed slice, and can no longer be resized. See also ManagedSlice, which does not have this drawback.

Variants

Borrowed variant.

Owned variant, only available with the std or alloc feature enabled.

Trait Implementations

impl<'a, T: 'a + ?Sized> Debug for Managed<'a, T> where
    T: Debug
[src]

[src]

Formats the value using the given formatter.

impl<'a, T: 'a + ?Sized> From<&'a mut T> for Managed<'a, T>
[src]

[src]

Performs the conversion.

impl<T: ?Sized + 'static> From<Box<T>> for Managed<'static, T>
[src]

[src]

Performs the conversion.

impl<T: 'static> From<Vec<T>> for Managed<'static, [T]>
[src]

[src]

Performs the conversion.

impl<'a, T: 'a + ?Sized> Deref for Managed<'a, T>
[src]

The resulting type after dereferencing.

[src]

Dereferences the value.

impl<'a, T: 'a + ?Sized> DerefMut for Managed<'a, T>
[src]

[src]

Mutably dereferences the value.