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.
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
impl ObjectIdentifier
Sourcepub const MAX_INSTANCE: u32 = 0x3F_FFFF
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.
Sourcepub const WILDCARD_INSTANCE: u32 = Self::MAX_INSTANCE
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.
Sourcepub const MAX_ADDRESSABLE_INSTANCE: u32
pub const MAX_ADDRESSABLE_INSTANCE: u32
Maximum instance number for a concrete addressable object (4,194,302).
This excludes WILDCARD_INSTANCE.
Sourcepub fn new(object_type: ObjectType, instance_number: u32) -> Result<Self, Error>
pub fn new(object_type: ObjectType, instance_number: u32) -> Result<Self, Error>
Create a new ObjectIdentifier from any valid 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 instance_number exceeds MAX_INSTANCE.
Sourcepub fn new_addressable(
object_type: ObjectType,
instance_number: u32,
) -> Result<Self, Error>
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 instance_number exceeds
MAX_INSTANCE or equals
WILDCARD_INSTANCE.
Sourcepub const fn new_unchecked(
object_type: ObjectType,
instance_number: u32,
) -> Self
pub const fn new_unchecked( object_type: ObjectType, instance_number: u32, ) -> Self
Create without validation. Caller must ensure instance <= MAX_INSTANCE.
Sourcepub const fn object_type(&self) -> ObjectType
pub const fn object_type(&self) -> ObjectType
The object type.
Sourcepub const fn instance_number(&self) -> u32
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.
Trait Implementations§
Source§impl Clone for ObjectIdentifier
impl Clone for ObjectIdentifier
Source§fn clone(&self) -> ObjectIdentifier
fn clone(&self) -> ObjectIdentifier
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for ObjectIdentifier
Source§impl Debug for ObjectIdentifier
impl Debug for ObjectIdentifier
Source§impl Display for ObjectIdentifier
impl Display for ObjectIdentifier
impl Eq for ObjectIdentifier
Source§impl Hash for ObjectIdentifier
impl Hash for ObjectIdentifier
Source§impl PartialEq for ObjectIdentifier
impl PartialEq for ObjectIdentifier
Source§fn eq(&self, other: &ObjectIdentifier) -> bool
fn eq(&self, other: &ObjectIdentifier) -> bool
self and other values to be equal, and is used by ==.