Struct compact::COption[][src]

pub struct COption<T: Compact + Clone>(pub Option<T>);

A wrapper to make an Option of a nontrivial Compact possible. Unfortunately, we can't blanket-impl that, since that overlaps (for the compiler) with the impl for trivial Copy types...

Methods from Deref<Target = Option<T>>

Returns true if the option is a Some value.

Examples

let x: Option<u32> = Some(2);
assert_eq!(x.is_some(), true);

let x: Option<u32> = None;
assert_eq!(x.is_some(), false);

Returns true if the option is a None value.

Examples

let x: Option<u32> = Some(2);
assert_eq!(x.is_none(), false);

let x: Option<u32> = None;
assert_eq!(x.is_none(), true);

Converts from Option<T> to Option<&T>.

Examples

Convert an Option<String> into an Option<usize>, preserving the original. The map method takes the self argument by value, consuming the original, so this technique uses as_ref to first take an Option to a reference to the value inside the original.

let text: Option<String> = Some("Hello, world!".to_string());
// First, cast `Option<String>` to `Option<&String>` with `as_ref`,
// then consume *that* with `map`, leaving `text` on the stack.
let text_length: Option<usize> = text.as_ref().map(|s| s.len());
println!("still can print text: {:?}", text);

Converts from Option<T> to Option<&mut T>.

Examples

let mut x = Some(2);
match x.as_mut() {
    Some(v) => *v = 42,
    None => {},
}
assert_eq!(x, Some(42));

🔬 This is a nightly-only experimental API. (pin)

Converts from Option<T> to Option<PinMut<'_, T>>

Important traits for Iter<'a, A>

Returns an iterator over the possibly contained value.

Examples

let x = Some(4);
assert_eq!(x.iter().next(), Some(&4));

let x: Option<u32> = None;
assert_eq!(x.iter().next(), None);

Important traits for IterMut<'a, A>

Returns a mutable iterator over the possibly contained value.

Examples

let mut x = Some(4);
match x.iter_mut().next() {
    Some(v) => *v = 42,
    None => {},
}
assert_eq!(x, Some(42));

let mut x: Option<u32> = None;
assert_eq!(x.iter_mut().next(), None);

Important traits for &'a mut R

Inserts v into the option if it is None, then returns a mutable reference to the contained value.

Examples

let mut x = None;

{
    let y: &mut u32 = x.get_or_insert(5);
    assert_eq!(y, &5);

    *y = 7;
}

assert_eq!(x, Some(7));

Important traits for &'a mut R

Inserts a value computed from f into the option if it is None, then returns a mutable reference to the contained value.

Examples

let mut x = None;

{
    let y: &mut u32 = x.get_or_insert_with(|| 5);
    assert_eq!(y, &5);

    *y = 7;
}

assert_eq!(x, Some(7));

Takes the value out of the option, leaving a None in its place.

Examples

let mut x = Some(2);
x.take();
assert_eq!(x, None);

let mut x: Option<u32> = None;
x.take();
assert_eq!(x, None);

Trait Implementations

impl<T: Clone + Compact + Clone> Clone for CompactOption<T>
[src]

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

impl<T: Default + Compact + Clone> Default for CompactOption<T>
[src]

Returns the "default value" for a type. Read more

impl<T: Compact + Clone> Deref for CompactOption<T>
[src]

The resulting type after dereferencing.

Dereferences the value.

impl<T: Compact + Clone> DerefMut for CompactOption<T>
[src]

Mutably dereferences the value.

impl<T: Clone + Compact> Compact for CompactOption<T>
[src]

Is the object's dynamic part stored compactly?

Size of the dynamic part in bytes

Copy the static part of source to dest and compactly store the dynamic part of source as the new dynamic part of dest at new_dynamic_part. This semantically moves source into dest. Read more

Creates a clone of self with the dynamic part guaranteed to be stored freely. Read more

Total size of the object (static part + dynamic part)

Get a pointer to behind the static part of self (commonly used place for the dynamic part)

Like compact with new_dynamic_part set to dest.behind()

Auto Trait Implementations

impl<T> Send for COption<T> where
    T: Send

impl<T> Sync for COption<T> where
    T: Sync