use openleadr_wire::target::TargetType;
#[derive(Copy, Clone, Debug)]
pub enum Target<'a> {
Program(&'a str),
Programs(&'a [&'a str]),
Event(&'a str),
Events(&'a [&'a str]),
VEN(&'a str),
VENs(&'a [&'a str]),
Group(&'a str),
Groups(&'a [&'a str]),
Resource(&'a str),
Resources(&'a [&'a str]),
ServiceArea(&'a str),
ServiceAreas(&'a [&'a str]),
PowerServiceLocation(&'a str),
PowerServiceLocations(&'a [&'a str]),
Other(&'a str, &'a str),
Others(&'a str, &'a [&'a str]),
}
impl Target<'_> {
pub fn target_label(&self) -> TargetType {
match self {
Target::Program(_) | Target::Programs(_) => TargetType::ProgramName,
Target::Event(_) | Target::Events(_) => TargetType::EventName,
Target::VEN(_) | Target::VENs(_) => TargetType::VENName,
Target::Group(_) | Target::Groups(_) => TargetType::Group,
Target::Resource(_) | Target::Resources(_) => TargetType::ResourceName,
Target::ServiceArea(_) | Target::ServiceAreas(_) => TargetType::ServiceArea,
Target::PowerServiceLocation(_) | Target::PowerServiceLocations(_) => {
TargetType::PowerServiceLocation
}
Target::Other(p, _) | Target::Others(p, _) => TargetType::Private(p.to_string()),
}
}
pub fn target_values(&self) -> &[&str] {
match self {
Target::Program(v) => std::slice::from_ref(v),
Target::Programs(v) => v,
Target::Event(v) => std::slice::from_ref(v),
Target::Events(v) => v,
Target::VEN(v) => std::slice::from_ref(v),
Target::VENs(v) => v,
Target::Group(v) => std::slice::from_ref(v),
Target::Groups(v) => v,
Target::Resource(v) => std::slice::from_ref(v),
Target::Resources(v) => v,
Target::ServiceArea(v) => std::slice::from_ref(v),
Target::ServiceAreas(v) => v,
Target::PowerServiceLocation(v) => std::slice::from_ref(v),
Target::PowerServiceLocations(v) => v,
Target::Other(_, v) => std::slice::from_ref(v),
Target::Others(_, v) => v,
}
}
}