pub struct ZeroOrOneArray<T>(/* private fields */);Expand description
An array with zero or one elements
A common pattern seen in the CDDL is to represent optional values as an array containing zero or more items. This structure reflects that pattern while providing semantic meaning.
Methods from Deref<Target = Option<T>>§
1.0.0pub 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.75.0pub fn as_slice(&self) -> &[T]
pub fn as_slice(&self) -> &[T]
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
assert_eq!(
[Some(1234).as_slice(), None.as_slice()],
[&[1234][..], &[][..]],
);The inverse of this function is (discounting
borrowing) [_]::first:
for i in [Some(1234_u16), None] {
assert_eq!(i.as_ref(), i.as_slice().first());
}1.40.0pub 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);Trait Implementations§
Source§impl<T: Clone> Clone for ZeroOrOneArray<T>
impl<T: Clone> Clone for ZeroOrOneArray<T>
Source§fn clone(&self) -> ZeroOrOneArray<T>
fn clone(&self) -> ZeroOrOneArray<T>
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<T: Debug> Debug for ZeroOrOneArray<T>
impl<T: Debug> Debug for ZeroOrOneArray<T>
Source§impl<'b, C, T> Decode<'b, C> for ZeroOrOneArray<T>where
T: Decode<'b, C>,
impl<'b, C, T> Decode<'b, C> for ZeroOrOneArray<T>where
T: Decode<'b, C>,
Source§impl<T> Deref for ZeroOrOneArray<T>
impl<T> Deref for ZeroOrOneArray<T>
Source§impl<C, T> Encode<C> for ZeroOrOneArray<T>where
T: Encode<C>,
impl<C, T> Encode<C> for ZeroOrOneArray<T>where
T: Encode<C>,
Auto Trait Implementations§
impl<T> Freeze for ZeroOrOneArray<T>where
T: Freeze,
impl<T> RefUnwindSafe for ZeroOrOneArray<T>where
T: RefUnwindSafe,
impl<T> Send for ZeroOrOneArray<T>where
T: Send,
impl<T> Sync for ZeroOrOneArray<T>where
T: Sync,
impl<T> Unpin for ZeroOrOneArray<T>where
T: Unpin,
impl<T> UnwindSafe for ZeroOrOneArray<T>where
T: UnwindSafe,
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)