1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
5#[non_exhaustive]
6pub enum InstrumentKind {
7 Dmm,
8 DcPowerSupply,
9 FunctionGenerator,
10 Oscilloscope,
11 Switch,
12 Counter,
13 PowerMeter,
14 SpectrumAnalyzer,
15 Unknown,
16}
17
18impl InstrumentKind {
19 pub fn from_str_label(label: &str) -> Option<Self> {
20 match label {
21 "Dmm" => Some(Self::Dmm),
22 "DcPowerSupply" => Some(Self::DcPowerSupply),
23 "FunctionGenerator" => Some(Self::FunctionGenerator),
24 "Oscilloscope" => Some(Self::Oscilloscope),
25 "Switch" => Some(Self::Switch),
26 "Counter" => Some(Self::Counter),
27 "PowerMeter" => Some(Self::PowerMeter),
28 "SpectrumAnalyzer" => Some(Self::SpectrumAnalyzer),
29 "Unknown" => Some(Self::Unknown),
30 _ => None,
31 }
32 }
33
34 pub fn as_str(self) -> &'static str {
35 match self {
36 Self::Dmm => "Dmm",
37 Self::DcPowerSupply => "DcPowerSupply",
38 Self::FunctionGenerator => "FunctionGenerator",
39 Self::Oscilloscope => "Oscilloscope",
40 Self::Switch => "Switch",
41 Self::Counter => "Counter",
42 Self::PowerMeter => "PowerMeter",
43 Self::SpectrumAnalyzer => "SpectrumAnalyzer",
44 Self::Unknown => "Unknown",
45 }
46 }
47}
48
49impl std::fmt::Display for InstrumentKind {
50 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
51 write!(f, "{}", self.as_str())
52 }
53}