Skip to main content

ObjectIdentifier

Struct ObjectIdentifier 

Source
pub struct ObjectIdentifier { /* private fields */ }
Expand description

BACnet Object Identifier: 10-bit type + 22-bit instance number.

Uniquely identifies a BACnet object within a device. Encoded as a 4-byte big-endian value: (object_type << 22) | instance_number. Checked construction and wire decoding preserve both field widths, so encoding cannot silently truncate an identifier.

The all-ones instance value WILDCARD_INSTANCE is still a valid 22-bit wire value, and some service contexts give it wildcard meaning. Use ObjectIdentifier::new or ObjectIdentifier::decode when preserving wire-level values. Use ObjectIdentifier::new_addressable when constructing identifiers for concrete objects that can be stored, addressed, or compared as actual object instances.

Implementations§

Source§

impl ObjectIdentifier

Source

pub const MAX_INSTANCE: u32 = 0x3F_FFFF

Maximum encodable instance number (2^22 - 1 = 4,194,303).

This is also WILDCARD_INSTANCE. It is accepted by ObjectIdentifier::new and ObjectIdentifier::decode for wire compatibility, but callers that need a concrete addressable object should use MAX_ADDRESSABLE_INSTANCE or ObjectIdentifier::new_addressable.

Source

pub const WILDCARD_INSTANCE: u32 = Self::MAX_INSTANCE

The reserved wildcard instance number (4,194,303).

BACnet service clauses assign this value special “any/local instance” meaning in selected contexts, for example Who-Is/Who-Am-I discovery and Device/Network Port object access. It is not a concrete object instance for addressable-object storage.

Source

pub const MAX_ADDRESSABLE_INSTANCE: u32

Maximum instance number for a concrete addressable object (4,194,302).

This excludes WILDCARD_INSTANCE.

Source

pub fn new(object_type: ObjectType, instance_number: u32) -> Result<Self, Error>

Create an ObjectIdentifier from a 10-bit type and 22-bit wire instance.

This constructor preserves WILDCARD_INSTANCE because it is a valid encoded value in BACnet service payloads. Use ObjectIdentifier::new_addressable when the identifier must name a concrete object instance.

§Errors

Returns Err if the object type exceeds 1023 or instance_number exceeds MAX_INSTANCE.

Source

pub fn new_addressable( object_type: ObjectType, instance_number: u32, ) -> Result<Self, Error>

Create a new ObjectIdentifier for a concrete addressable object.

This rejects WILDCARD_INSTANCE, while ObjectIdentifier::new keeps accepting that value for wire-level round trips and BACnet service contexts where it is meaningful.

§Errors

Returns Err if the object type exceeds 1023, or instance_number exceeds MAX_INSTANCE or equals WILDCARD_INSTANCE.

Source

pub const fn object_type(&self) -> ObjectType

The object type.

Source

pub const fn instance_number(&self) -> u32

The instance number (0 to 4,194,303).

Values returned from wire decoding may equal WILDCARD_INSTANCE. Treat that value as a concrete addressable object only after the relevant service context has resolved its wildcard semantics.

Source

pub fn encode(&self) -> [u8; 4]

Encode to the 4-byte BACnet wire format (big-endian).

Source

pub fn decode(data: &[u8]) -> Result<Self, Error>

Decode from the 4-byte BACnet wire format (big-endian).

Trait Implementations§

Source§

impl Clone for ObjectIdentifier

Source§

fn clone(&self) -> Self

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 Copy for ObjectIdentifier

Source§

impl Debug for ObjectIdentifier

Source§

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

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

impl Display for ObjectIdentifier

Source§

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

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

impl Eq for ObjectIdentifier

Source§

impl From<ObjectIdentifier> for BACnetDeviceObjectReference

Source§

fn from(object_identifier: ObjectIdentifier) -> Self

A reference to an object in this device: no device identifier.

Source§

impl Hash for ObjectIdentifier

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 ObjectIdentifier

Source§

fn eq(&self, other: &Self) -> 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 ObjectIdentifier

Auto Trait Implementations§

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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.