Skip to main content

PrefixedOptional

Struct PrefixedOptional 

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

An optional value prefixed by a boolean presence marker.

The wire format is a Boolean followed by T when the boolean is true:

Boolean(is present) + (is present ? T : nothing)

Unlike Optional<T>, this type implements TypeCodec because its wire representation contains its own presence marker. The marker is 0x01 when the wrapped value is Some, and 0x00 when it is None.

§Examples

use mcproto_types::{TypeCodec, basic::UnsignedByte};
use mcproto_types::contextual::PrefixedOptional;

let value = PrefixedOptional::some(UnsignedByte(0xab));
let mut encoded = Vec::new();
value.encode(&mut encoded)?;
assert_eq!(encoded, [0x01, 0xab]);

let mut input = encoded.as_slice();
assert_eq!(PrefixedOptional::<UnsignedByte>::decode(&mut input)?, value);
assert!(input.is_empty());

Tuple Fields§

§0: Optional<T>

The optional value and its context-controlled encoding behavior.

Implementations§

Source§

impl<T> PrefixedOptional<T>

Source

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

Creates a prefixed optional containing value.

Source

pub const fn none() -> Self

Creates a prefixed optional with no value.

Source

pub const fn is_some(&self) -> bool

Returns whether the prefixed optional contains a value.

Source

pub const fn is_none(&self) -> bool

Returns whether the prefixed optional contains no value.

Source

pub const fn as_ref(&self) -> PrefixedOptional<&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 PrefixedOptional<T>

Source§

fn clone(&self) -> PrefixedOptional<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: Debug> Debug for PrefixedOptional<T>

Source§

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

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

impl<T: Default> Default for PrefixedOptional<T>

Source§

fn default() -> PrefixedOptional<T>

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

impl<T: Eq> Eq for PrefixedOptional<T>

Source§

impl<T> From<Option<T>> for PrefixedOptional<T>

Source§

fn from(value: Option<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> From<PrefixedOptional<T>> for Option<T>

Source§

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

Converts to this type from the input type.
Source§

impl<T: Hash> Hash for PrefixedOptional<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 PrefixedOptional<T>

Source§

fn eq(&self, other: &PrefixedOptional<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 PrefixedOptional<T>

Source§

impl<T> TypeCodec for PrefixedOptional<T>
where T: TypeCodec,

Source§

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

Encodes this value to the writer.
Source§

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

Decodes this value from the reader.

Auto Trait Implementations§

§

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

§

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

§

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

§

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

§

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

§

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

§

impl<T> UnwindSafe for PrefixedOptional<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> ContextualCodec for T
where T: TypeCodec,

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<T, CodecError>
where T: Sized,

Decodes this value using context supplied by its enclosing structure.
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.