Skip to main content

Optional

Struct Optional 

Source
#[repr(transparent)]
pub struct Optional<T>(pub Option<T>);
Expand description

A context-controlled optional value of protocol type T.

Optional<T> stores an Option<T>, but it does not encode a presence marker. When the supplied Context is present, the inner T is encoded using its ContextualCodec implementation. When the context is absent, the value occupies zero bytes.

The caller must derive the context from the enclosing packet or data structure. This type therefore implements ContextualCodec, not TypeCodec. A value/context mismatch is reported as an encoding error; it is never silently discarded.

§Examples

use mcproto_types::{ContextualCodec, TypeCodec, basic::UnsignedByte};
use mcproto_types::contextual::{Context, Optional};

let value = Optional::some(UnsignedByte(0xab));
let mut encoded = Vec::new();
value.encode_with_context(&mut encoded, &Context::present())?;
assert_eq!(encoded, [0xab]);

let mut input = encoded.as_slice();
assert_eq!(
    Optional::<UnsignedByte>::decode_with_context(&mut input, &Context::present())?,
    value,
);

Tuple Fields§

§0: Option<T>

The optional value held in memory.

Implementations§

Source§

impl<T> Optional<T>

Source

pub const fn some(value: T) -> Self

Creates an optional value that is present.

Source

pub const fn none() -> Self

Creates an optional value that is absent.

Source

pub const fn is_some(&self) -> bool

Returns whether this wrapper contains a value.

Source

pub const fn is_none(&self) -> bool

Returns whether this wrapper contains no value.

Source

pub const fn as_ref(&self) -> Optional<&T>

Returns the contained value by reference, if present.

Source

pub fn into_option(self) -> Option<T>

Extracts the wrapped Option<T>.

Trait Implementations§

Source§

impl<T: Clone> Clone for Optional<T>

Source§

fn clone(&self) -> Optional<T>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T> ContextualCodec for Optional<T>
where T: ContextualCodec,

Source§

fn encode_with_context( &self, writer: &mut impl Write, context: &Context, ) -> Result<(), CodecError>

Encodes this value using context supplied by its enclosing structure.
Source§

fn decode_with_context( reader: &mut impl Read, context: &Context, ) -> Result<Self, CodecError>

Decodes this value using context supplied by its enclosing structure.
Source§

impl<T: Debug> Debug for Optional<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T: Default> Default for Optional<T>

Source§

fn default() -> Optional<T>

Returns the “default value” for a type. Read more
Source§

impl<T: Eq> Eq for Optional<T>

Source§

impl<T> From<Option<T>> for Optional<T>

Source§

fn from(value: Option<T>) -> Self

Converts to this type from the input type.
Source§

impl<T> From<Optional<T>> for Option<T>

Source§

fn from(value: Optional<T>) -> Self

Converts to this type from the input type.
Source§

impl<T> From<Optional<T>> for PrefixedOptional<T>

Source§

fn from(value: Optional<T>) -> Self

Converts to this type from the input type.
Source§

impl<T: Hash> Hash for Optional<T>

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<T: PartialEq> PartialEq for Optional<T>

Source§

fn eq(&self, other: &Optional<T>) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl<T: PartialEq> StructuralPartialEq for Optional<T>

Auto Trait Implementations§

§

impl<T> Freeze for Optional<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for Optional<T>
where T: RefUnwindSafe,

§

impl<T> Send for Optional<T>
where T: Send,

§

impl<T> Sync for Optional<T>
where T: Sync,

§

impl<T> Unpin for Optional<T>
where T: Unpin,

§

impl<T> UnsafeUnpin for Optional<T>
where T: UnsafeUnpin,

§

impl<T> UnwindSafe for Optional<T>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.