Skip to main content

instrument_core/
kind.rs

1use serde::{Deserialize, Serialize};
2
3/// Instrument functional class (IVI-inspired).
4#[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}