openleadr_client/
target.rs1use openleadr_wire::target::TargetType;
2
3#[derive(Copy, Clone, Debug)]
5pub enum Target<'a> {
6 Program(&'a str),
8
9 Programs(&'a [&'a str]),
11
12 Event(&'a str),
14
15 Events(&'a [&'a str]),
17
18 VEN(&'a str),
20
21 VENs(&'a [&'a str]),
23
24 Group(&'a str),
26
27 Groups(&'a [&'a str]),
29
30 Resource(&'a str),
32
33 Resources(&'a [&'a str]),
35
36 ServiceArea(&'a str),
38
39 ServiceAreas(&'a [&'a str]),
41
42 PowerServiceLocation(&'a str),
44
45 PowerServiceLocations(&'a [&'a str]),
47
48 Other(&'a str, &'a str),
50
51 Others(&'a str, &'a [&'a str]),
53}
54
55impl Target<'_> {
56 pub fn target_label(&self) -> TargetType {
58 match self {
59 Target::Program(_) | Target::Programs(_) => TargetType::ProgramName,
60 Target::Event(_) | Target::Events(_) => TargetType::EventName,
61 Target::VEN(_) | Target::VENs(_) => TargetType::VENName,
62 Target::Group(_) | Target::Groups(_) => TargetType::Group,
63 Target::Resource(_) | Target::Resources(_) => TargetType::ResourceName,
64 Target::ServiceArea(_) | Target::ServiceAreas(_) => TargetType::ServiceArea,
65 Target::PowerServiceLocation(_) | Target::PowerServiceLocations(_) => {
66 TargetType::PowerServiceLocation
67 }
68 Target::Other(p, _) | Target::Others(p, _) => TargetType::Private(p.to_string()),
69 }
70 }
71
72 pub fn target_values(&self) -> &[&str] {
74 match self {
75 Target::Program(v) => std::slice::from_ref(v),
76 Target::Programs(v) => v,
77 Target::Event(v) => std::slice::from_ref(v),
78 Target::Events(v) => v,
79 Target::VEN(v) => std::slice::from_ref(v),
80 Target::VENs(v) => v,
81 Target::Group(v) => std::slice::from_ref(v),
82 Target::Groups(v) => v,
83 Target::Resource(v) => std::slice::from_ref(v),
84 Target::Resources(v) => v,
85 Target::ServiceArea(v) => std::slice::from_ref(v),
86 Target::ServiceAreas(v) => v,
87 Target::PowerServiceLocation(v) => std::slice::from_ref(v),
88 Target::PowerServiceLocations(v) => v,
89 Target::Other(_, v) => std::slice::from_ref(v),
90 Target::Others(_, v) => v,
91 }
92 }
93}