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}