Skip to main content

bacnet_types/enums/
property_id.rs

1// ===========================================================================
2// PropertyIdentifier (Clause 21)
3// ===========================================================================
4
5#[cfg(all(feature = "serde", not(feature = "std")))]
6use alloc::string::String;
7
8#[cfg(feature = "serde")]
9use serde::Deserialize;
10
11bacnet_enum! {
12    /// BACnet property identifiers (Clause 21).
13    ///
14    /// ASHRAE assigns 0 to 511 and everything from 4,194,304 up; vendors use
15    /// 512 to 4,194,303 (Clause 23, Table 23-1). A property identifier is an
16    /// ENUMERATED, so any `u32` is a valid wire value.
17    pub struct PropertyIdentifier(u32);
18
19    // 0-50
20    const ACKED_TRANSITIONS = 0;
21    const ACK_REQUIRED = 1;
22    const ACTION = 2;
23    const ACTION_TEXT = 3;
24    const ACTIVE_TEXT = 4;
25    const ACTIVE_VT_SESSIONS = 5;
26    const ALARM_VALUE = 6;
27    const ALARM_VALUES = 7;
28    const ALL = 8;
29    const ALL_WRITES_SUCCESSFUL = 9;
30    const APDU_SEGMENT_TIMEOUT = 10;
31    const APDU_TIMEOUT = 11;
32    const APPLICATION_SOFTWARE_VERSION = 12;
33    const ARCHIVE = 13;
34    const BIAS = 14;
35    const CHANGE_OF_STATE_COUNT = 15;
36    const CHANGE_OF_STATE_TIME = 16;
37    const NOTIFICATION_CLASS = 17;
38    // 18: deleted
39    const CONTROLLED_VARIABLE_REFERENCE = 19;
40    const CONTROLLED_VARIABLE_UNITS = 20;
41    const CONTROLLED_VARIABLE_VALUE = 21;
42    const COV_INCREMENT = 22;
43    const DATE_LIST = 23;
44    const DAYLIGHT_SAVINGS_STATUS = 24;
45    const DEADBAND = 25;
46    const DERIVATIVE_CONSTANT = 26;
47    const DERIVATIVE_CONSTANT_UNITS = 27;
48    const DESCRIPTION = 28;
49    const DESCRIPTION_OF_HALT = 29;
50    const DEVICE_ADDRESS_BINDING = 30;
51    const DEVICE_TYPE = 31;
52    const EFFECTIVE_PERIOD = 32;
53    const ELAPSED_ACTIVE_TIME = 33;
54    const ERROR_LIMIT = 34;
55    const EVENT_ENABLE = 35;
56    const EVENT_STATE = 36;
57    const EVENT_TYPE = 37;
58    const EXCEPTION_SCHEDULE = 38;
59    const FAULT_VALUES = 39;
60    const FEEDBACK_VALUE = 40;
61    const FILE_ACCESS_METHOD = 41;
62    const FILE_SIZE = 42;
63    const FILE_TYPE = 43;
64    const FIRMWARE_REVISION = 44;
65    const HIGH_LIMIT = 45;
66    const INACTIVE_TEXT = 46;
67    const IN_PROCESS = 47;
68    const INSTANCE_OF = 48;
69    const INTEGRAL_CONSTANT = 49;
70    const INTEGRAL_CONSTANT_UNITS = 50;
71
72    // 51-100
73    const ISSUE_CONFIRMED_NOTIFICATIONS = 51;
74    const LIMIT_ENABLE = 52;
75    const LIST_OF_GROUP_MEMBERS = 53;
76    const LIST_OF_OBJECT_PROPERTY_REFERENCES = 54;
77    // 55: deleted
78    const LOCAL_DATE = 56;
79    const LOCAL_TIME = 57;
80    const LOCATION = 58;
81    const LOW_LIMIT = 59;
82    const MANIPULATED_VARIABLE_REFERENCE = 60;
83    const MAXIMUM_OUTPUT = 61;
84    const MAX_APDU_LENGTH_ACCEPTED = 62;
85    const MAX_INFO_FRAMES = 63;
86    const MAX_MASTER = 64;
87    const MAX_PRES_VALUE = 65;
88    const MINIMUM_OFF_TIME = 66;
89    const MINIMUM_ON_TIME = 67;
90    const MINIMUM_OUTPUT = 68;
91    const MIN_PRES_VALUE = 69;
92    const MODEL_NAME = 70;
93    const MODIFICATION_DATE = 71;
94    const NOTIFY_TYPE = 72;
95    const NUMBER_OF_APDU_RETRIES = 73;
96    const NUMBER_OF_STATES = 74;
97    const OBJECT_IDENTIFIER = 75;
98    const OBJECT_LIST = 76;
99    const OBJECT_NAME = 77;
100    const OBJECT_PROPERTY_REFERENCE = 78;
101    const OBJECT_TYPE = 79;
102    const OPTIONAL = 80;
103    const OUT_OF_SERVICE = 81;
104    const OUTPUT_UNITS = 82;
105    const EVENT_PARAMETERS = 83;
106    const POLARITY = 84;
107    const PRESENT_VALUE = 85;
108    const PRIORITY = 86;
109    const PRIORITY_ARRAY = 87;
110    const PRIORITY_FOR_WRITING = 88;
111    const PROCESS_IDENTIFIER = 89;
112    const PROGRAM_CHANGE = 90;
113    const PROGRAM_LOCATION = 91;
114    const PROGRAM_STATE = 92;
115    const PROPORTIONAL_CONSTANT = 93;
116    const PROPORTIONAL_CONSTANT_UNITS = 94;
117    // 95: deleted
118    const PROTOCOL_OBJECT_TYPES_SUPPORTED = 96;
119    const PROTOCOL_SERVICES_SUPPORTED = 97;
120    const PROTOCOL_VERSION = 98;
121    const READ_ONLY = 99;
122    const REASON_FOR_HALT = 100;
123
124    // 101-200
125    // 101: deleted
126    const RECIPIENT_LIST = 102;
127    const RELIABILITY = 103;
128    const RELINQUISH_DEFAULT = 104;
129    const REQUIRED = 105;
130    const RESOLUTION = 106;
131    const SEGMENTATION_SUPPORTED = 107;
132    const SETPOINT = 108;
133    const SETPOINT_REFERENCE = 109;
134    const STATE_TEXT = 110;
135    const STATUS_FLAGS = 111;
136    const SYSTEM_STATUS = 112;
137    const TIME_DELAY = 113;
138    const TIME_OF_ACTIVE_TIME_RESET = 114;
139    const TIME_OF_STATE_COUNT_RESET = 115;
140    const TIME_SYNCHRONIZATION_RECIPIENTS = 116;
141    const UNITS = 117;
142    const UPDATE_INTERVAL = 118;
143    const UTC_OFFSET = 119;
144    const VENDOR_IDENTIFIER = 120;
145    const VENDOR_NAME = 121;
146    const VT_CLASSES_SUPPORTED = 122;
147    const WEEKLY_SCHEDULE = 123;
148    const ATTEMPTED_SAMPLES = 124;
149    const AVERAGE_VALUE = 125;
150    const BUFFER_SIZE = 126;
151    const CLIENT_COV_INCREMENT = 127;
152    const COV_RESUBSCRIPTION_INTERVAL = 128;
153    // 129: deleted
154    const EVENT_TIME_STAMPS = 130;
155    const LOG_BUFFER = 131;
156    const LOG_DEVICE_OBJECT_PROPERTY = 132;
157    const LOG_ENABLE = 133;
158    const LOG_INTERVAL = 134;
159    const MAXIMUM_VALUE = 135;
160    const MINIMUM_VALUE = 136;
161    const NOTIFICATION_THRESHOLD = 137;
162    // 138: deleted
163    const PROTOCOL_REVISION = 139;
164    const RECORDS_SINCE_NOTIFICATION = 140;
165    const RECORD_COUNT = 141;
166    const START_TIME = 142;
167    const STOP_TIME = 143;
168    const STOP_WHEN_FULL = 144;
169    const TOTAL_RECORD_COUNT = 145;
170    const VALID_SAMPLES = 146;
171    const WINDOW_INTERVAL = 147;
172    const WINDOW_SAMPLES = 148;
173    const MAXIMUM_VALUE_TIMESTAMP = 149;
174    const MINIMUM_VALUE_TIMESTAMP = 150;
175    const VARIANCE_VALUE = 151;
176    const ACTIVE_COV_SUBSCRIPTIONS = 152;
177    const BACKUP_FAILURE_TIMEOUT = 153;
178    const CONFIGURATION_FILES = 154;
179    const DATABASE_REVISION = 155;
180    const DIRECT_READING = 156;
181    const LAST_RESTORE_TIME = 157;
182    const MAINTENANCE_REQUIRED = 158;
183    const MEMBER_OF = 159;
184    const MODE = 160;
185    const OPERATION_EXPECTED = 161;
186    const SETTING = 162;
187    const SILENCED = 163;
188    const TRACKING_VALUE = 164;
189    const ZONE_MEMBERS = 165;
190    const LIFE_SAFETY_ALARM_VALUES = 166;
191    const MAX_SEGMENTS_ACCEPTED = 167;
192    const PROFILE_NAME = 168;
193    const AUTO_SLAVE_DISCOVERY = 169;
194    const MANUAL_SLAVE_ADDRESS_BINDING = 170;
195    const SLAVE_ADDRESS_BINDING = 171;
196    const SLAVE_PROXY_ENABLE = 172;
197    const LAST_NOTIFY_RECORD = 173;
198    const SCHEDULE_DEFAULT = 174;
199    const ACCEPTED_MODES = 175;
200    const ADJUST_VALUE = 176;
201    const COUNT = 177;
202    const COUNT_BEFORE_CHANGE = 178;
203    const COUNT_CHANGE_TIME = 179;
204    const COV_PERIOD = 180;
205    const INPUT_REFERENCE = 181;
206    const LIMIT_MONITORING_INTERVAL = 182;
207    const LOGGING_OBJECT = 183;
208    const LOGGING_RECORD = 184;
209    const PRESCALE = 185;
210    const PULSE_RATE = 186;
211    const SCALE = 187;
212    const SCALE_FACTOR = 188;
213    const UPDATE_TIME = 189;
214    const VALUE_BEFORE_CHANGE = 190;
215    const VALUE_SET = 191;
216    const VALUE_CHANGE_TIME = 192;
217    const ALIGN_INTERVALS = 193;
218    // 194: unassigned
219    const INTERVAL_OFFSET = 195;
220    const LAST_RESTART_REASON = 196;
221    const LOGGING_TYPE = 197;
222    // 198-201: unassigned
223
224    // 202-235
225    const RESTART_NOTIFICATION_RECIPIENTS = 202;
226    const TIME_OF_DEVICE_RESTART = 203;
227    const TIME_SYNCHRONIZATION_INTERVAL = 204;
228    const TRIGGER = 205;
229    const UTC_TIME_SYNCHRONIZATION_RECIPIENTS = 206;
230    const NODE_SUBTYPE = 207;
231    const NODE_TYPE = 208;
232    const STRUCTURED_OBJECT_LIST = 209;
233    const SUBORDINATE_ANNOTATIONS = 210;
234    const SUBORDINATE_LIST = 211;
235    const ACTUAL_SHED_LEVEL = 212;
236    const DUTY_WINDOW = 213;
237    const EXPECTED_SHED_LEVEL = 214;
238    const FULL_DUTY_BASELINE = 215;
239    // 216-217: unassigned
240    const REQUESTED_SHED_LEVEL = 218;
241    const SHED_DURATION = 219;
242    const SHED_LEVEL_DESCRIPTIONS = 220;
243    const SHED_LEVELS = 221;
244    const STATE_DESCRIPTION = 222;
245    // 223-225: unassigned
246    const DOOR_ALARM_STATE = 226;
247    const DOOR_EXTENDED_PULSE_TIME = 227;
248    const DOOR_MEMBERS = 228;
249    const DOOR_OPEN_TOO_LONG_TIME = 229;
250    const DOOR_PULSE_TIME = 230;
251    const DOOR_STATUS = 231;
252    const DOOR_UNLOCK_DELAY_TIME = 232;
253    const LOCK_STATUS = 233;
254    const MASKED_ALARM_VALUES = 234;
255    const SECURED_STATUS = 235;
256
257    // 244-323 (access control)
258    const ABSENTEE_LIMIT = 244;
259    const ACCESS_ALARM_EVENTS = 245;
260    const ACCESS_DOORS = 246;
261    const ACCESS_EVENT = 247;
262    const ACCESS_EVENT_AUTHENTICATION_FACTOR = 248;
263    const ACCESS_EVENT_CREDENTIAL = 249;
264    const ACCESS_EVENT_TIME = 250;
265    const ACCESS_TRANSACTION_EVENTS = 251;
266    const ACCOMPANIMENT = 252;
267    const ACCOMPANIMENT_TIME = 253;
268    const ACTIVATION_TIME = 254;
269    const ACTIVE_AUTHENTICATION_POLICY = 255;
270    const ASSIGNED_ACCESS_RIGHTS = 256;
271    const AUTHENTICATION_FACTORS = 257;
272    const AUTHENTICATION_POLICY_LIST = 258;
273    const AUTHENTICATION_POLICY_NAMES = 259;
274    const AUTHENTICATION_STATUS = 260;
275    const AUTHORIZATION_MODE = 261;
276    const BELONGS_TO = 262;
277    const CREDENTIAL_DISABLE = 263;
278    const CREDENTIAL_STATUS = 264;
279    const CREDENTIALS = 265;
280    const CREDENTIALS_IN_ZONE = 266;
281    const DAYS_REMAINING = 267;
282    const ENTRY_POINTS = 268;
283    const EXIT_POINTS = 269;
284    const EXPIRATION_TIME = 270;
285    const EXTENDED_TIME_ENABLE = 271;
286    const FAILED_ATTEMPT_EVENTS = 272;
287    const FAILED_ATTEMPTS = 273;
288    const FAILED_ATTEMPTS_TIME = 274;
289    const LAST_ACCESS_EVENT = 275;
290    const LAST_ACCESS_POINT = 276;
291    const LAST_CREDENTIAL_ADDED = 277;
292    const LAST_CREDENTIAL_ADDED_TIME = 278;
293    const LAST_CREDENTIAL_REMOVED = 279;
294    const LAST_CREDENTIAL_REMOVED_TIME = 280;
295    const LAST_USE_TIME = 281;
296    const LOCKOUT = 282;
297    const LOCKOUT_RELINQUISH_TIME = 283;
298    // 284: deleted
299    const MAX_FAILED_ATTEMPTS = 285;
300    const MEMBERS = 286;
301    const MUSTER_POINT = 287;
302    const NEGATIVE_ACCESS_RULES = 288;
303    const NUMBER_OF_AUTHENTICATION_POLICIES = 289;
304    const OCCUPANCY_COUNT = 290;
305    const OCCUPANCY_COUNT_ADJUST = 291;
306    const OCCUPANCY_COUNT_ENABLE = 292;
307    // 293: deleted
308    const OCCUPANCY_LOWER_LIMIT = 294;
309    const OCCUPANCY_LOWER_LIMIT_ENFORCED = 295;
310    const OCCUPANCY_STATE = 296;
311    const OCCUPANCY_UPPER_LIMIT = 297;
312    const OCCUPANCY_UPPER_LIMIT_ENFORCED = 298;
313    // 299: deleted
314    const PASSBACK_MODE = 300;
315    const PASSBACK_TIMEOUT = 301;
316    const POSITIVE_ACCESS_RULES = 302;
317    const REASON_FOR_DISABLE = 303;
318    const SUPPORTED_FORMATS = 304;
319    const SUPPORTED_FORMAT_CLASSES = 305;
320    const THREAT_AUTHORITY = 306;
321    const THREAT_LEVEL = 307;
322    const TRACE_FLAG = 308;
323    const TRANSACTION_NOTIFICATION_CLASS = 309;
324    const USER_EXTERNAL_IDENTIFIER = 310;
325    const USER_INFORMATION_REFERENCE = 311;
326    // 312-316: unassigned
327    const USER_NAME = 317;
328    const USER_TYPE = 318;
329    const USES_REMAINING = 319;
330    const ZONE_FROM = 320;
331    const ZONE_TO = 321;
332    const ACCESS_EVENT_TAG = 322;
333    const GLOBAL_IDENTIFIER = 323;
334
335    // 326-398
336    const VERIFICATION_TIME = 326;
337    /// Deprecated: removed with Clause 24 in 135-2020.
338    const BASE_DEVICE_SECURITY_POLICY = 327;
339    /// Deprecated: removed with Clause 24 in 135-2020.
340    const DISTRIBUTION_KEY_REVISION = 328;
341    /// Deprecated: removed with Clause 24 in 135-2020.
342    const DO_NOT_HIDE = 329;
343    /// Deprecated: removed with Clause 24 in 135-2020.
344    const KEY_SETS = 330;
345    /// Deprecated: removed with Clause 24 in 135-2020.
346    const LAST_KEY_SERVER = 331;
347    /// Deprecated: removed with Clause 24 in 135-2020.
348    const NETWORK_ACCESS_SECURITY_POLICIES = 332;
349    /// Deprecated: removed with Clause 24 in 135-2020.
350    const PACKET_REORDER_TIME = 333;
351    /// Deprecated: removed with Clause 24 in 135-2020.
352    const SECURITY_PDU_TIMEOUT = 334;
353    /// Deprecated: removed with Clause 24 in 135-2020.
354    const SECURITY_TIME_WINDOW = 335;
355    /// Deprecated: removed with Clause 24 in 135-2020.
356    const SUPPORTED_SECURITY_ALGORITHMS = 336;
357    /// Deprecated: removed with Clause 24 in 135-2020.
358    const UPDATE_KEY_SET_TIMEOUT = 337;
359    const BACKUP_AND_RESTORE_STATE = 338;
360    const BACKUP_PREPARATION_TIME = 339;
361    const RESTORE_COMPLETION_TIME = 340;
362    const RESTORE_PREPARATION_TIME = 341;
363    const BIT_MASK = 342;
364    const BIT_TEXT = 343;
365    const IS_UTC = 344;
366    const GROUP_MEMBERS = 345;
367    const GROUP_MEMBER_NAMES = 346;
368    const MEMBER_STATUS_FLAGS = 347;
369    const REQUESTED_UPDATE_INTERVAL = 348;
370    const COVU_PERIOD = 349;
371    const COVU_RECIPIENTS = 350;
372    const EVENT_MESSAGE_TEXTS = 351;
373    const EVENT_MESSAGE_TEXTS_CONFIG = 352;
374    const EVENT_DETECTION_ENABLE = 353;
375    const EVENT_ALGORITHM_INHIBIT = 354;
376    const EVENT_ALGORITHM_INHIBIT_REF = 355;
377    const TIME_DELAY_NORMAL = 356;
378    const RELIABILITY_EVALUATION_INHIBIT = 357;
379    const FAULT_PARAMETERS = 358;
380    const FAULT_TYPE = 359;
381    const LOCAL_FORWARDING_ONLY = 360;
382    const PROCESS_IDENTIFIER_FILTER = 361;
383    const SUBSCRIBED_RECIPIENTS = 362;
384    const PORT_FILTER = 363;
385    const AUTHORIZATION_EXEMPTIONS = 364;
386    const ALLOW_GROUP_DELAY_INHIBIT = 365;
387    const CHANNEL_NUMBER = 366;
388    const CONTROL_GROUPS = 367;
389    const EXECUTION_DELAY = 368;
390    const LAST_PRIORITY = 369;
391    const WRITE_STATUS = 370;
392    const PROPERTY_LIST = 371;
393    const SERIAL_NUMBER = 372;
394    const BLINK_WARN_ENABLE = 373;
395    const DEFAULT_FADE_TIME = 374;
396    const DEFAULT_RAMP_RATE = 375;
397    const DEFAULT_STEP_INCREMENT = 376;
398    const EGRESS_TIME = 377;
399    const IN_PROGRESS = 378;
400    const INSTANTANEOUS_POWER = 379;
401    const LIGHTING_COMMAND = 380;
402    const LIGHTING_COMMAND_DEFAULT_PRIORITY = 381;
403    const MAX_ACTUAL_VALUE = 382;
404    const MIN_ACTUAL_VALUE = 383;
405    const POWER = 384;
406    const TRANSITION = 385;
407    const EGRESS_ACTIVE = 386;
408    const INTERFACE_VALUE = 387;
409    const FAULT_HIGH_LIMIT = 388;
410    const FAULT_LOW_LIMIT = 389;
411    const LOW_DIFF_LIMIT = 390;
412    const STRIKE_COUNT = 391;
413    const TIME_OF_STRIKE_COUNT_RESET = 392;
414    const DEFAULT_TIMEOUT = 393;
415    const INITIAL_TIMEOUT = 394;
416    const LAST_STATE_CHANGE = 395;
417    const STATE_CHANGE_VALUES = 396;
418    const TIMER_RUNNING = 397;
419    const TIMER_STATE = 398;
420
421    // 399-429 (NetworkPort, Clause 12.56)
422    const APDU_LENGTH = 399;
423    const IP_ADDRESS = 400;
424    const IP_DEFAULT_GATEWAY = 401;
425    const IP_DHCP_ENABLE = 402;
426    const IP_DHCP_LEASE_TIME = 403;
427    const IP_DHCP_LEASE_TIME_REMAINING = 404;
428    const IP_DHCP_SERVER = 405;
429    const IP_DNS_SERVER = 406;
430    const BACNET_IP_GLOBAL_ADDRESS = 407;
431    const BACNET_IP_MODE = 408;
432    const BACNET_IP_MULTICAST_ADDRESS = 409;
433    const BACNET_IP_NAT_TRAVERSAL = 410;
434    const IP_SUBNET_MASK = 411;
435    const BACNET_IP_UDP_PORT = 412;
436    const BBMD_ACCEPT_FD_REGISTRATIONS = 413;
437    const BBMD_BROADCAST_DISTRIBUTION_TABLE = 414;
438    const BBMD_FOREIGN_DEVICE_TABLE = 415;
439    const CHANGES_PENDING = 416;
440    const COMMAND_NP = 417;
441    const FD_BBMD_ADDRESS = 418;
442    const FD_SUBSCRIPTION_LIFETIME = 419;
443    const LINK_SPEED = 420;
444    const LINK_SPEEDS = 421;
445    const LINK_SPEED_AUTONEGOTIATE = 422;
446    const MAC_ADDRESS = 423;
447    const NETWORK_INTERFACE_NAME = 424;
448    const NETWORK_NUMBER = 425;
449    const NETWORK_NUMBER_QUALITY = 426;
450    const NETWORK_TYPE = 427;
451    const ROUTING_TABLE = 428;
452    const VIRTUAL_MAC_ADDRESS_TABLE = 429;
453
454    // 430-446 (commandable + IPv6)
455    const COMMAND_TIME_ARRAY = 430;
456    const CURRENT_COMMAND_PRIORITY = 431;
457    const LAST_COMMAND_TIME = 432;
458    const VALUE_SOURCE = 433;
459    const VALUE_SOURCE_ARRAY = 434;
460    const BACNET_IPV6_MODE = 435;
461    const IPV6_ADDRESS = 436;
462    const IPV6_PREFIX_LENGTH = 437;
463    const BACNET_IPV6_UDP_PORT = 438;
464    const IPV6_DEFAULT_GATEWAY = 439;
465    const BACNET_IPV6_MULTICAST_ADDRESS = 440;
466    const IPV6_DNS_SERVER = 441;
467    const IPV6_AUTO_ADDRESSING_ENABLE = 442;
468    const IPV6_DHCP_LEASE_TIME = 443;
469    const IPV6_DHCP_LEASE_TIME_REMAINING = 444;
470    const IPV6_DHCP_SERVER = 445;
471    const IPV6_ZONE_INDEX = 446;
472
473    // 447-480 (lift/escalator, Clause 12.58-12.60)
474    const ASSIGNED_LANDING_CALLS = 447;
475    const CAR_ASSIGNED_DIRECTION = 448;
476    const CAR_DOOR_COMMAND = 449;
477    const CAR_DOOR_STATUS = 450;
478    const CAR_DOOR_TEXT = 451;
479    const CAR_DOOR_ZONE = 452;
480    const CAR_DRIVE_STATUS = 453;
481    const CAR_LOAD = 454;
482    const CAR_LOAD_UNITS = 455;
483    const CAR_MODE = 456;
484    const CAR_MOVING_DIRECTION = 457;
485    const CAR_POSITION = 458;
486    const ELEVATOR_GROUP = 459;
487    const ENERGY_METER = 460;
488    const ENERGY_METER_REF = 461;
489    const ESCALATOR_MODE = 462;
490    const FAULT_SIGNALS = 463;
491    const FLOOR_TEXT = 464;
492    const GROUP_ID = 465;
493    // 466: unassigned
494    const GROUP_MODE = 467;
495    const HIGHER_DECK = 468;
496    const INSTALLATION_ID = 469;
497    const LANDING_CALLS = 470;
498    const LANDING_CALL_CONTROL = 471;
499    const LANDING_DOOR_STATUS = 472;
500    const LOWER_DECK = 473;
501    const MACHINE_ROOM_ID = 474;
502    const MAKING_CAR_CALL = 475;
503    const NEXT_STOPPING_FLOOR = 476;
504    const OPERATION_DIRECTION = 477;
505    const PASSENGER_ALARM = 478;
506    const POWER_MODE = 479;
507    const REGISTERED_CAR_CALL = 480;
508
509    // 481-507 (misc + staging + audit)
510    const ACTIVE_COV_MULTIPLE_SUBSCRIPTIONS = 481;
511    const PROTOCOL_LEVEL = 482;
512    const REFERENCE_PORT = 483;
513    const DEPLOYED_PROFILE_LOCATION = 484;
514    const PROFILE_LOCATION = 485;
515    const TAGS = 486;
516    const SUBORDINATE_NODE_TYPES = 487;
517    const SUBORDINATE_TAGS = 488;
518    const SUBORDINATE_RELATIONSHIPS = 489;
519    const DEFAULT_SUBORDINATE_RELATIONSHIP = 490;
520    const REPRESENTS = 491;
521    const DEFAULT_PRESENT_VALUE = 492;
522    const PRESENT_STAGE = 493;
523    const STAGES = 494;
524    const STAGE_NAMES = 495;
525    const TARGET_REFERENCES = 496;
526    const AUDIT_SOURCE_REPORTER = 497;
527    const AUDIT_LEVEL = 498;
528    const AUDIT_NOTIFICATION_RECIPIENT = 499;
529    const AUDIT_PRIORITY_FILTER = 500;
530    const AUDITABLE_OPERATIONS = 501;
531    const DELETE_ON_FORWARD = 502;
532    const MAXIMUM_SEND_DELAY = 503;
533    const MONITORED_OBJECTS = 504;
534    const SEND_NOW = 505;
535    const FLOOR_NUMBER = 506;
536    const DEVICE_UUID = 507;
537
538    // 508-511 (Network Port, Addendum 135-2020cc)
539    /// A Network Port's further reference ports (Addendum 135-2020cc).
540    const ADDITIONAL_REFERENCE_PORTS = 508;
541    /// A Network Port's certificate signing request file (Addendum
542    /// 135-2020cc).
543    const CERTIFICATE_SIGNING_REQUEST_FILE = 509;
544    /// The result of a Network Port's last validated command (Addendum
545    /// 135-2020cc).
546    const COMMAND_VALIDATION_RESULT = 510;
547    /// A Network Port's issuer certificate files (Addendum 135-2020cc).
548    const ISSUER_CERTIFICATE_FILES = 511;
549
550    // 4194304 and up (the second ASHRAE range)
551    /// A Color object's start-up colour (Addendum 135-2020ca).
552    const DEFAULT_COLOR = 4194330;
553    /// A Color Temperature object's start-up colour temperature (Addendum
554    /// 135-2020ca).
555    const DEFAULT_COLOR_TEMPERATURE = 4194331;
556    /// The BACnetColorCommand of a Color or Color Temperature object
557    /// (Addendum 135-2020ca). The addendum itself left this property out of
558    /// its Clause 21 list; its errata of 2023-01-05 (item 1) number it, and
559    /// bacnet-stack, Wireshark and BACnet4J use the same value.
560    const COLOR_COMMAND = 4194334;
561}
562
563#[cfg(feature = "serde")]
564impl<'de> Deserialize<'de> for PropertyIdentifier {
565    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
566    where
567        D: serde::Deserializer<'de>,
568    {
569        let string: String = Deserialize::deserialize(deserializer)?;
570        string.parse().map_err(serde::de::Error::custom)
571    }
572}
573
574#[cfg(all(test, feature = "serde"))]
575mod serde_tests {
576    use super::PropertyIdentifier;
577
578    fn parse(input: &str) -> PropertyIdentifier {
579        serde_json::from_str(&format!("\"{input}\"")).expect("deserializes")
580    }
581
582    #[test]
583    fn accepts_every_supported_case_style() {
584        for input in [
585            "presentvalue",
586            "PRESENTVALUE",
587            "PresentValue",
588            "presentValue",
589            "present_value",
590            "PRESENT_VALUE",
591            "present-value",
592            "PRESENT-VALUE",
593        ] {
594            assert_eq!(
595                parse(input),
596                PropertyIdentifier::PRESENT_VALUE,
597                "input: {input}"
598            );
599        }
600    }
601
602    #[test]
603    fn covers_the_full_standard_range() {
604        assert_eq!(
605            parse("acked_transitions"),
606            PropertyIdentifier::ACKED_TRANSITIONS
607        );
608        assert_eq!(parse("default-color"), PropertyIdentifier::DEFAULT_COLOR);
609        assert_eq!(
610            parse("issuer-certificate-files"),
611            PropertyIdentifier::ISSUER_CERTIFICATE_FILES
612        );
613    }
614
615    #[test]
616    fn rejects_unknown_names() {
617        assert!(serde_json::from_str::<PropertyIdentifier>("\"not-a-property\"").is_err());
618    }
619
620    #[test]
621    fn rejects_non_string_input() {
622        assert!(serde_json::from_str::<PropertyIdentifier>("85").is_err());
623    }
624}