pub trait OptionExt<T>: ResultLike + TypeIdentity<Type = Option<T>> + Sized {
    fn map_ref<'a, U, F>(&'a self, f: F) -> Option<U>
    where
        T: 'a,
        F: FnOnce(&'a T) -> U
, { ... } fn map_mut<'a, U, F>(&'a mut self, f: F) -> Option<U>
    where
        T: 'a,
        F: FnOnce(&'a mut T) -> U
, { ... } }
Available on crate feature option_result only.
Expand description

Extension trait for Option.

Provided Methods

Maps as reference to the contents.

Example
use core_extensions::OptionExt;

struct User{
    name: String,
    surname: String,
}

let user = Some(User{name: "Bob".to_string(), surname: "Math".to_string()});
let name    = user.map_ref(|v| v.name.as_str() );
let surname = user.map_ref(|v| v.surname.as_str() );

assert_eq!(name, Some("Bob"));
assert_eq!(surname, Some("Math"));

Maps as mutable reference to the contents.

Example
use core_extensions::OptionExt;

struct User{
    name: String,
    surname: String,
}

let mut user = Some(User{name: "Matt".into(), surname: "Parker".into()});
{
    let name = user.map_mut(|v|{
        v.name.push_str("hew");
        v.name.as_str()
    });
     
    assert_eq!(name, Some("Matthew"));
}
assert_eq!(user.unwrap().name, "Matthew");

Implementations on Foreign Types

Implementors