Enum spaceapi_server::api::Optional
[−]
pub enum Optional<T> {
Value(T),
Absent,
}An Optional can contain Optional::Value<T> or Optional::Absent.
It is similar to an Option, but Optional::Absent means it will be
omitted when serialized, while None will be serialized to null.
Variants
Value | |
Absent |
Methods
impl<T> Optional<T>
fn unwrap(self) -> T
Moves the value v out of the Optional<T> if it is Value(v).
Panics
Panics if the self value equals Absent.
Safety note
In general, because this function may panic, its use is discouraged.
Instead, prefer to use pattern matching and handle the Absent
case explicitly.
Examples
let x = Value("air"); assert_eq!(x.unwrap(), "air");
let x: Optional<&str> = Absent; assert_eq!(x.unwrap(), "air"); // fails
fn unwrap_or_else<F>(self, f: F) -> T where F: FnOnce() -> T
Returns the contained value or computes it from a closure.
Examples
let k = 10; assert_eq!(Value(4).unwrap_or_else(|| 2 * k), 4); assert_eq!(Absent.unwrap_or_else(|| 2 * k), 20);
fn map<U, F>(self, f: F) -> Optional<U> where F: FnOnce(T) -> U
Maps an Optional<T> to Optional<U> by applying a function to a contained value
Examples
Convert an Optional<String> into an Optional<usize>, consuming the original:
let num_as_str: Optional<String> = Value("10".to_string()); // `Optional::map` takes self *by value*, consuming `num_as_str` let num_as_int: Optional<usize> = num_as_str.map(|n| n.len());
fn map_or<U, F>(self, def: U, f: F) -> U where F: FnOnce(T) -> U
Applies a function to the contained value or returns a default. see
std::option::Option<T>::map_or
fn as_mut(&'r mut self) -> Optional<&'r mut T>
Converts from Optional<T> to Optional<&mut T>
fn as_ref(&'r self) -> Optional<&'r T>
Converts from Optional<T> to Optional<&T>
fn and_then<U, F>(self, f: F) -> Optional<U> where F: FnOnce(T) -> Optional<U>
Returns Absent if the optional is Absent, otherwise calls f with the
wrapped value and returns the result.
Some languages call this operation flatmap.
Examples
fn sq(x: u32) -> Optional<u32> { Value(x * x) } fn nope(_: u32) -> Optional<u32> { Absent } assert_eq!(Value(2).and_then(sq).and_then(sq), Value(16)); assert_eq!(Value(2).and_then(sq).and_then(nope), Absent); assert_eq!(Value(2).and_then(nope).and_then(sq), Absent); assert_eq!(Absent.and_then(sq).and_then(sq), Absent);
fn is_absent(&self) -> bool
Returns true if the optional is a Absent value
Examples
let x: Optional<u32> = Value(2); assert_eq!(x.is_absent(), false); let x: Optional<u32> = Absent; assert_eq!(x.is_absent(), true);