Skip to main content

rustbac_tools/
lib.rs

1use clap::ValueEnum;
2use rustbac_core::types::ObjectType;
3
4/// CLI-friendly enum for selecting BACnet object types.
5///
6/// Maps human-readable names to [`ObjectType`] variants for use with clap argument parsing.
7#[derive(Debug, Clone, ValueEnum)]
8pub enum ObjectTypeArg {
9    AnalogInput,
10    AnalogOutput,
11    AnalogValue,
12    BinaryInput,
13    BinaryOutput,
14    BinaryValue,
15    Calendar,
16    Command,
17    Device,
18    EventEnrollment,
19    File,
20    Group,
21    Loop,
22    MultiStateInput,
23    MultiStateOutput,
24    NotificationClass,
25    Program,
26    Schedule,
27    Averaging,
28    MultiStateValue,
29    TrendLog,
30    LifeSafetyPoint,
31    LifeSafetyZone,
32    Accumulator,
33    PulseConverter,
34    EventLog,
35    GlobalGroup,
36    TrendLogMultiple,
37    StructuredView,
38    AccessDoor,
39}
40
41impl ObjectTypeArg {
42    /// Convert to the core [`ObjectType`] representation.
43    pub const fn into_object_type(self) -> ObjectType {
44        match self {
45            Self::AnalogInput => ObjectType::AnalogInput,
46            Self::AnalogOutput => ObjectType::AnalogOutput,
47            Self::AnalogValue => ObjectType::AnalogValue,
48            Self::BinaryInput => ObjectType::BinaryInput,
49            Self::BinaryOutput => ObjectType::BinaryOutput,
50            Self::BinaryValue => ObjectType::BinaryValue,
51            Self::Calendar => ObjectType::Calendar,
52            Self::Command => ObjectType::Command,
53            Self::Device => ObjectType::Device,
54            Self::EventEnrollment => ObjectType::EventEnrollment,
55            Self::File => ObjectType::File,
56            Self::Group => ObjectType::Group,
57            Self::Loop => ObjectType::Loop,
58            Self::MultiStateInput => ObjectType::MultiStateInput,
59            Self::MultiStateOutput => ObjectType::MultiStateOutput,
60            Self::NotificationClass => ObjectType::NotificationClass,
61            Self::Program => ObjectType::Program,
62            Self::Schedule => ObjectType::Schedule,
63            Self::Averaging => ObjectType::Averaging,
64            Self::MultiStateValue => ObjectType::MultiStateValue,
65            Self::TrendLog => ObjectType::TrendLog,
66            Self::LifeSafetyPoint => ObjectType::LifeSafetyPoint,
67            Self::LifeSafetyZone => ObjectType::LifeSafetyZone,
68            Self::Accumulator => ObjectType::Accumulator,
69            Self::PulseConverter => ObjectType::PulseConverter,
70            Self::EventLog => ObjectType::EventLog,
71            Self::GlobalGroup => ObjectType::GlobalGroup,
72            Self::TrendLogMultiple => ObjectType::TrendLogMultiple,
73            Self::StructuredView => ObjectType::StructuredView,
74            Self::AccessDoor => ObjectType::AccessDoor,
75        }
76    }
77}