#[repr(transparent)]pub struct Option<T>(_);Expand description
An Option that exposes its value through their Miniconf implementation.
Design
Miniconf supports optional values in two forms.
In both forms, the Option may be marked with #[miniconf(defer)]
and be None at run-time. This makes the corresponding part of the namespace inaccessible
at run-time. It will still be iterated over by Miniconf::iter_paths() but cannot be
get() or set() using the Miniconf API.
This is intended as a mechanism to provide run-time construction of the namespace. In some cases, run-time detection may indicate that some component is not present. In this case, namespaces will not be exposed for it.
The first form is the miniconf::Option type which optionally exposes its
interior Miniconf value as a sub-tree. An miniconf::Option should usually be
#[miniconf(defer)].
Miniconf also allows for the normal usage of Rust core::option::Option types. In this case,
the Option can be used to atomically access the content within. If marked with #[miniconf(defer)]
and None at runtime, it is inaccessible through Miniconf. Otherwise, JSON null corresponds to
None as usual.
Construction
An miniconf::Option can be constructed using From<core::option::Option>/Into<miniconf::Option>
and the contained value can be accessed through Deref/DerefMut.
Methods from Deref<Target = Option<T>>§
1.0.0 · sourcepub fn as_ref(&self) -> Option<&T>
pub fn as_ref(&self) -> Option<&T>
Converts from &Option<T> to Option<&T>.
Examples
Calculates the length of an Option<String> as an Option<usize>
without moving the String. 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:?}");1.0.0 · sourcepub fn as_mut(&mut self) -> Option<&mut T>
pub fn as_mut(&mut self) -> Option<&mut T>
Converts from &mut 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));sourcepub fn as_slice(&self) -> &[T]
🔬This is a nightly-only experimental API. (option_as_slice)
pub fn as_slice(&self) -> &[T]
option_as_slice)Returns a slice of the contained value, if any. If this is None, an
empty slice is returned. This can be useful to have a single type of
iterator over an Option or slice.
Note: Should you have an Option<&T> and wish to get a slice of T,
you can unpack it via opt.map_or(&[], std::slice::from_ref).
Examples
#![feature(option_as_slice)]
assert_eq!(
[Some(1234).as_slice(), None.as_slice()],
[&[1234][..], &[][..]],
);The inverse of this function is (discounting
borrowing) [_]::first:
#![feature(option_as_slice)]
for i in [Some(1234_u16), None] {
assert_eq!(i.as_ref(), i.as_slice().first());
}sourcepub fn as_mut_slice(&mut self) -> &mut [T]
🔬This is a nightly-only experimental API. (option_as_slice)
pub fn as_mut_slice(&mut self) -> &mut [T]
option_as_slice)Returns a mutable slice of the contained value, if any. If this is
None, an empty slice is returned. This can be useful to have a
single type of iterator over an Option or slice.
Note: Should you have an Option<&mut T> instead of a
&mut Option<T>, which this method takes, you can obtain a mutable
slice via opt.map_or(&mut [], std::slice::from_mut).
Examples
#![feature(option_as_slice)]
assert_eq!(
[Some(1234).as_mut_slice(), None.as_mut_slice()],
[&mut [1234][..], &mut [][..]],
);The result is a mutable slice of zero or one items that points into
our original Option:
#![feature(option_as_slice)]
let mut x = Some(1234);
x.as_mut_slice()[0] += 1;
assert_eq!(x, Some(1235));The inverse of this method (discounting borrowing)
is [_]::first_mut:
#![feature(option_as_slice)]
assert_eq!(Some(123).as_mut_slice().first_mut(), Some(&mut 123))1.40.0 · sourcepub fn as_deref(&self) -> Option<&<T as Deref>::Target>where
T: Deref,
pub fn as_deref(&self) -> Option<&<T as Deref>::Target>where T: Deref,
Converts from Option<T> (or &Option<T>) to Option<&T::Target>.
Leaves the original Option in-place, creating a new one with a reference
to the original one, additionally coercing the contents via Deref.
Examples
let x: Option<String> = Some("hey".to_owned());
assert_eq!(x.as_deref(), Some("hey"));
let x: Option<String> = None;
assert_eq!(x.as_deref(), None);1.40.0 · sourcepub fn as_deref_mut(&mut self) -> Option<&mut <T as Deref>::Target>where
T: DerefMut,
pub fn as_deref_mut(&mut self) -> Option<&mut <T as Deref>::Target>where T: DerefMut,
Converts from Option<T> (or &mut Option<T>) to Option<&mut T::Target>.
Leaves the original Option in-place, creating a new one containing a mutable reference to
the inner type’s Deref::Target type.
Examples
let mut x: Option<String> = Some("hey".to_owned());
assert_eq!(x.as_deref_mut().map(|x| {
x.make_ascii_uppercase();
x
}), Some("HEY".to_owned().as_mut_str()));1.0.0 · sourcepub fn iter(&self) -> Iter<'_, T>
pub fn iter(&self) -> Iter<'_, T>
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);1.0.0 · sourcepub fn iter_mut(&mut self) -> IterMut<'_, T>
pub fn iter_mut(&mut self) -> IterMut<'_, T>
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);1.53.0 · sourcepub fn insert(&mut self, value: T) -> &mut T
pub fn insert(&mut self, value: T) -> &mut T
Inserts value into the option, then returns a mutable reference to it.
If the option already contains a value, the old value is dropped.
See also Option::get_or_insert, which doesn’t update the value if
the option already contains Some.
Example
let mut opt = None;
let val = opt.insert(1);
assert_eq!(*val, 1);
assert_eq!(opt.unwrap(), 1);
let val = opt.insert(2);
assert_eq!(*val, 2);
*val = 3;
assert_eq!(opt.unwrap(), 3);1.20.0 · sourcepub fn get_or_insert(&mut self, value: T) -> &mut T
pub fn get_or_insert(&mut self, value: T) -> &mut T
Inserts value into the option if it is None, then
returns a mutable reference to the contained value.
See also Option::insert, which updates the value even if
the option already contains Some.
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));sourcepub fn get_or_insert_default(&mut self) -> &mut Twhere
T: Default,
🔬This is a nightly-only experimental API. (option_get_or_insert_default)
pub fn get_or_insert_default(&mut self) -> &mut Twhere T: Default,
option_get_or_insert_default)1.20.0 · sourcepub fn get_or_insert_with<F>(&mut self, f: F) -> &mut Twhere
F: FnOnce() -> T,
pub fn get_or_insert_with<F>(&mut self, f: F) -> &mut Twhere F: FnOnce() -> T,
1.31.0 · sourcepub fn replace(&mut self, value: T) -> Option<T>
pub fn replace(&mut self, value: T) -> Option<T>
Replaces the actual value in the option by the value given in parameter,
returning the old value if present,
leaving a Some in its place without deinitializing either one.
Examples
let mut x = Some(2);
let old = x.replace(5);
assert_eq!(x, Some(5));
assert_eq!(old, Some(2));
let mut x = None;
let old = x.replace(3);
assert_eq!(x, Some(3));
assert_eq!(old, None);Trait Implementations§
source§impl<'de, T> Deserialize<'de> for Option<T>where
T: Deserialize<'de>,
impl<'de, T> Deserialize<'de> for Option<T>where T: Deserialize<'de>,
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where __D: Deserializer<'de>,
source§impl<T: Miniconf> Miniconf for Option<T>
impl<T: Miniconf> Miniconf for Option<T>
source§fn set_path<'a, P: Peekable<Item = &'a str>>(
&mut self,
path_parts: &'a mut P,
value: &[u8]
) -> Result<usize, Error>
fn set_path<'a, P: Peekable<Item = &'a str>>( &mut self, path_parts: &'a mut P, value: &[u8] ) -> Result<usize, Error>
source§fn get_path<'a, P: Peekable<Item = &'a str>>(
&self,
path_parts: &'a mut P,
value: &mut [u8]
) -> Result<usize, Error>
fn get_path<'a, P: Peekable<Item = &'a str>>( &self, path_parts: &'a mut P, value: &mut [u8] ) -> Result<usize, Error>
source§fn next_path<const TS: usize>(
state: &mut [usize],
path: &mut String<TS>
) -> Result<bool, IterError>
fn next_path<const TS: usize>( state: &mut [usize], path: &mut String<TS> ) -> Result<bool, IterError>
source§fn set(&mut self, path: &str, data: &[u8]) -> Result<usize, Error>
fn set(&mut self, path: &str, data: &[u8]) -> Result<usize, Error>
source§fn get(&self, path: &str, data: &mut [u8]) -> Result<usize, Error>
fn get(&self, path: &str, data: &mut [u8]) -> Result<usize, Error>
source§fn iter_paths<const L: usize, const TS: usize>(
) -> Result<MiniconfIter<Self, L, TS>, IterError>
fn iter_paths<const L: usize, const TS: usize>( ) -> Result<MiniconfIter<Self, L, TS>, IterError>
source§fn unchecked_iter_paths<const L: usize, const TS: usize>(
count: Option<usize>
) -> MiniconfIter<Self, L, TS> ⓘ
fn unchecked_iter_paths<const L: usize, const TS: usize>( count: Option<usize> ) -> MiniconfIter<Self, L, TS> ⓘ
source§impl<T: Ord> Ord for Option<T>
impl<T: Ord> Ord for Option<T>
source§impl<T: PartialEq> PartialEq<Option<T>> for Option<T>
impl<T: PartialEq> PartialEq<Option<T>> for Option<T>
source§impl<T: PartialOrd> PartialOrd<Option<T>> for Option<T>
impl<T: PartialOrd> PartialOrd<Option<T>> for Option<T>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self and other) and is used by the <=
operator. Read more