Skip to main content

rustbac_client/
discovery.rs

1use rustbac_core::types::ObjectId;
2use rustbac_datalink::DataLinkAddress;
3
4/// A BACnet device discovered via a Who-Is / I-Am exchange.
5///
6/// `device_id` is `None` if the I-Am reply could not be decoded to extract the object
7/// identifier (this should not happen with a standards-compliant device).
8#[derive(Debug, Clone)]
9#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10pub struct DiscoveredDevice {
11    /// Transport address from which the I-Am reply was received.
12    pub address: DataLinkAddress,
13    /// The device's object identifier (type = Device, instance = device instance number).
14    pub device_id: Option<ObjectId>,
15}
16
17/// A BACnet object discovered via a Who-Has / I-Have exchange.
18#[derive(Debug, Clone)]
19#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
20pub struct DiscoveredObject {
21    /// Transport address from which the I-Have reply was received.
22    pub address: DataLinkAddress,
23    /// Object identifier of the device that owns this object.
24    pub device_id: ObjectId,
25    /// Object identifier of the discovered object.
26    pub object_id: ObjectId,
27    /// Human-readable name of the discovered object as reported by the device.
28    pub object_name: String,
29}