Skip to main content

IdSet

Enum IdSet 

Source
pub enum IdSet {
    Tag(Identifier),
    Inline(Vec<i32>),
}
Expand description

A set of registry IDs represented inline or by reference to a tag.

The registry itself is implied by the enclosing packet or field. The Minecraft protocol ID Set wire representation starts with a VarInt type value:

  • 0 is followed by an Identifier naming a registry tag;
  • a positive value n is followed by n - 1 registry IDs encoded as VarInts.
VarInt(0) + Identifier(tag_name)
VarInt(ids.len() + 1) + VarInt(ids[0]) + ... + VarInt(ids[len - 1])

An empty inline set therefore uses type value 1. Registry IDs must be non-negative, and an inline set may contain at most i32::MAX - 1 IDs.

§Examples

use mcproto_types::{TypeCodec, basic::Identifier};
use mcproto_types::contextual::IdSet;

let inline = IdSet::inline(vec![3, 7]);
let mut encoded = Vec::new();
inline.encode(&mut encoded)?;
assert_eq!(encoded, [0x03, 0x03, 0x07]);

let mut input = encoded.as_slice();
assert_eq!(IdSet::decode(&mut input)?, inline);

let tagged = IdSet::tag(Identifier::new("minecraft:logs")?);
assert!(tagged.is_tag());

Variants§

§

Tag(Identifier)

A named set of IDs defined by a registry tag.

§

Inline(Vec<i32>)

An ad-hoc set of zero-based registry IDs enumerated inline.

Implementations§

Source§

impl IdSet

Source

pub const fn tag(tag_name: Identifier) -> Self

Creates an ID set that refers to a registry tag.

Source

pub const fn inline(ids: Vec<i32>) -> Self

Creates an ID set containing inline registry IDs.

Source

pub const fn is_tag(&self) -> bool

Returns whether this set refers to a registry tag.

Source

pub const fn is_inline(&self) -> bool

Returns whether this set enumerates registry IDs inline.

Source

pub const fn tag_name(&self) -> Option<&Identifier>

Returns the registry tag name, if this is a tag reference.

Source

pub const fn ids(&self) -> Option<&[i32]>

Returns the inline registry IDs, if present.

Source

pub fn into_tag(self) -> Option<Identifier>

Extracts the registry tag name, if this is a tag reference.

Source

pub fn into_ids(self) -> Option<Vec<i32>>

Extracts the inline registry IDs, if present.

Trait Implementations§

Source§

impl Clone for IdSet

Source§

fn clone(&self) -> IdSet

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 Debug for IdSet

Source§

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

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

impl Eq for IdSet

Source§

impl From<Identifier> for IdSet

Source§

fn from(tag_name: Identifier) -> Self

Converts to this type from the input type.
Source§

impl From<Vec<i32>> for IdSet

Source§

fn from(ids: Vec<i32>) -> Self

Converts to this type from the input type.
Source§

impl Hash for IdSet

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 PartialEq for IdSet

Source§

fn eq(&self, other: &IdSet) -> bool

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

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

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for IdSet

Source§

impl TypeCodec for IdSet

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 Freeze for IdSet

§

impl RefUnwindSafe for IdSet

§

impl Send for IdSet

§

impl Sync for IdSet

§

impl Unpin for IdSet

§

impl UnsafeUnpin for IdSet

§

impl UnwindSafe for IdSet

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.