ni_syscfg/
experts.rs

1/// Contains the code to handle various functions around the "experts" in the system configuraton API.
2///
3
4/// `ExpertType` wraps the reference names for different experts in the system API.
5///
6/// Those defined in <https://www.ni.com/en-gb/support/documentation/supplemental/18/valid-experts-for-the-system-configuration-api-functions.html>(Valid Experts for the System Configuration API Functions) are already included here.
7///
8/// [`Unknown`] provides a get out for those not translated already or that are added in the future.
9#[derive(Clone, PartialEq, Eq, Debug)]
10pub enum ExpertType {
11    CanOpen,
12    CRio,
13    CRioWithDaqmx,
14    NetworkDiscovery,
15    FlexRIOModularIO,
16    FlexRIOIntegratedIO,
17    Ni488_2,
18    Ni568x,
19    Ni845x,
20    NiController,
21    NiDaqmx,
22    NiDCPower,
23    NiDCPower416x,
24    NiDMM,
25    NiDMM408x,
26    NiFGen,
27    NimmWave,
28    NiOSI,
29    NiPTP,
30    NiPXImc,
31    NiRio,
32    RTSI,
33    NiScope,
34    NiScope5170,
35    NiScope5164,
36    NiScope5110,
37    Serial,
38    SLSC,
39    STS,
40    NiSync,
41    NiVISA,
42    NiVNA,
43    NiVST,
44    NiWSN,
45    NiXNET,
46    PXIPlatformServices,
47    Softmotion,
48    /// Provides a way of accessing any new or unknown types by including the string directly.
49    Unknown(String),
50}
51
52impl From<&str> for ExpertType {
53    fn from(text: &str) -> Self {
54        match text {
55            "ni-canopen" => Self::CanOpen,
56            "crio" => Self::CRio,
57            "crioparent" => ExpertType::CRioWithDaqmx,
58            "network" => ExpertType::NetworkDiscovery,
59            "niflexrio" => ExpertType::FlexRIOModularIO,
60            "niflexrio2" => ExpertType::FlexRIOIntegratedIO,
61            "ni-488.2" => ExpertType::Ni488_2,
62            "ni-rfpowermeter" => ExpertType::Ni568x,
63            "845x" => ExpertType::Ni845x,
64            "ni-controller" => ExpertType::NiController,
65            "daqmx" => ExpertType::NiDaqmx,
66            "dcpowerscx" => ExpertType::NiDCPower,
67            "nidcpower416x" => ExpertType::NiDCPower416x,
68            "nidmmscx" => ExpertType::NiDMM,
69            "nidmm408x" => ExpertType::NiDMM408x,
70            "nifgen5433" => ExpertType::NiFGen,
71            "ni-mmwave" => ExpertType::NimmWave,
72            "ni-osi" => ExpertType::NiOSI,
73            "ni-1588" => ExpertType::NiPTP,
74            "ni-pximc" => ExpertType::NiPXImc,
75            "ni-rio" => ExpertType::NiRio,
76            "rtsi" => ExpertType::RTSI,
77            "niscopescx" => ExpertType::NiScope,
78            "niscope5170" => ExpertType::NiScope5170,
79            "niscope5164" => ExpertType::NiScope5164,
80            "niscope5110" => ExpertType::NiScope5110,
81            "serial" => ExpertType::Serial,
82            "slsc" => ExpertType::SLSC,
83            "nistsrcbps" => ExpertType::STS,
84            "ni-sync" => ExpertType::NiSync,
85            "ni-visa" => ExpertType::NiVISA,
86            "nivna" => ExpertType::NiVNA,
87            "ni-vst" => ExpertType::NiVST,
88            "ni-wsn" => ExpertType::NiWSN,
89            "xnet" => ExpertType::NiXNET,
90            "ni-pxi" => ExpertType::PXIPlatformServices,
91            "mcSysApi" => ExpertType::Softmotion,
92            _ => ExpertType::Unknown(text.to_string()),
93        }
94    }
95}
96
97impl ExpertType {
98    /// Provides the string for the expert used in the system configuration API.
99    pub fn to_programmatic_string(&self) -> String {
100        match self {
101            ExpertType::Unknown(name) => name.clone(),
102            ExpertType::CanOpen => "ni-canopen".to_string(),
103            ExpertType::CRio => "crio".to_string(),
104            ExpertType::CRioWithDaqmx => "crioparent".to_string(),
105            ExpertType::NetworkDiscovery => "network".to_string(),
106            ExpertType::FlexRIOModularIO => "niflexrio".to_string(),
107            ExpertType::FlexRIOIntegratedIO => "niflexrio2".to_string(),
108            ExpertType::Ni488_2 => "ni-488.2".to_string(),
109            ExpertType::Ni568x => "ni-rfpowermeter".to_string(),
110            ExpertType::Ni845x => "845x".to_string(),
111            ExpertType::NiController => "ni-controller".to_string(),
112            ExpertType::NiDaqmx => "daqmx".to_string(),
113            ExpertType::NiDCPower => "dcpowerscx".to_string(),
114            ExpertType::NiDCPower416x => "nidcpower416x".to_string(),
115            ExpertType::NiDMM => "nidmmscx".to_string(),
116            ExpertType::NiDMM408x => "nidmm408x".to_string(),
117            ExpertType::NiFGen => "nifgen5433".to_string(),
118            ExpertType::NimmWave => "ni-mmwave".to_string(),
119            ExpertType::NiOSI => "ni-osi".to_string(),
120            ExpertType::NiPTP => "ni-1588".to_string(),
121            ExpertType::NiPXImc => "ni-pximc".to_string(),
122            ExpertType::NiRio => "ni-rio".to_string(),
123            ExpertType::RTSI => "rtsi".to_string(),
124            ExpertType::NiScope => "niscopescx".to_string(),
125            ExpertType::NiScope5170 => "niscope5170".to_string(),
126            ExpertType::NiScope5164 => "niscope5164".to_string(),
127            ExpertType::NiScope5110 => "niscope5110".to_string(),
128            ExpertType::Serial => "serial".to_string(),
129            ExpertType::SLSC => "slsc".to_string(),
130            ExpertType::STS => "nistsrcbps".to_string(),
131            ExpertType::NiSync => "ni-sync".to_string(),
132            ExpertType::NiVISA => "ni-visa".to_string(),
133            ExpertType::NiVNA => "nivna".to_string(),
134            ExpertType::NiVST => "ni-vst".to_string(),
135            ExpertType::NiWSN => "ni-wsn".to_string(),
136            ExpertType::NiXNET => "xnet".to_string(),
137            ExpertType::PXIPlatformServices => "ni-pxi".to_string(),
138            ExpertType::Softmotion => "mcSysApi".to_string(),
139        }
140    }
141}
142
143pub struct SystemExpert {
144    expert_type: ExpertType,
145    display_name: String,
146    version: String,
147}
148
149#[cfg(test)]
150mod test {
151
152    use super::*;
153
154    fn test_string_conversion(expert_type: ExpertType, programmatic_name: &str) {
155        assert_eq!(
156            expert_type.to_programmatic_string(),
157            programmatic_name.to_string()
158        );
159        assert_eq!(expert_type, programmatic_name.into());
160    }
161
162    #[test]
163    fn type_to_string() {
164        test_string_conversion(ExpertType::Unknown("unknown".to_string()), "unknown");
165        test_string_conversion(ExpertType::CanOpen, "ni-canopen");
166        test_string_conversion(ExpertType::CRio, "crio");
167        test_string_conversion(ExpertType::CRioWithDaqmx, "crioparent");
168        test_string_conversion(ExpertType::NetworkDiscovery, "network");
169        test_string_conversion(ExpertType::FlexRIOModularIO, "niflexrio");
170        test_string_conversion(ExpertType::FlexRIOIntegratedIO, "niflexrio2");
171        test_string_conversion(ExpertType::Ni488_2, "ni-488.2");
172        test_string_conversion(ExpertType::Ni568x, "ni-rfpowermeter");
173        test_string_conversion(ExpertType::Ni845x, "845x");
174        test_string_conversion(ExpertType::NiController, "ni-controller");
175        test_string_conversion(ExpertType::NiDaqmx, "daqmx");
176        test_string_conversion(ExpertType::NiDCPower, "dcpowerscx");
177        test_string_conversion(ExpertType::NiDCPower416x, "nidcpower416x");
178        test_string_conversion(ExpertType::NiDMM, "nidmmscx");
179        test_string_conversion(ExpertType::NiDMM408x, "nidmm408x");
180        test_string_conversion(ExpertType::NiFGen, "nifgen5433");
181        test_string_conversion(ExpertType::NimmWave, "ni-mmwave");
182        test_string_conversion(ExpertType::NiOSI, "ni-osi");
183        test_string_conversion(ExpertType::NiPTP, "ni-1588");
184        test_string_conversion(ExpertType::NiPXImc, "ni-pximc");
185        test_string_conversion(ExpertType::NiRio, "ni-rio");
186        test_string_conversion(ExpertType::RTSI, "rtsi");
187        test_string_conversion(ExpertType::NiScope, "niscopescx");
188        test_string_conversion(ExpertType::NiScope5170, "niscope5170");
189        test_string_conversion(ExpertType::NiScope5164, "niscope5164");
190        test_string_conversion(ExpertType::NiScope5110, "niscope5110");
191        test_string_conversion(ExpertType::Serial, "serial");
192        test_string_conversion(ExpertType::SLSC, "slsc");
193        test_string_conversion(ExpertType::STS, "nistsrcbps");
194        test_string_conversion(ExpertType::NiSync, "ni-sync");
195        test_string_conversion(ExpertType::NiVISA, "ni-visa");
196        test_string_conversion(ExpertType::NiVNA, "nivna");
197        test_string_conversion(ExpertType::NiVST, "ni-vst");
198        test_string_conversion(ExpertType::NiWSN, "ni-wsn");
199        test_string_conversion(ExpertType::NiXNET, "xnet");
200        test_string_conversion(ExpertType::PXIPlatformServices, "ni-pxi");
201        test_string_conversion(ExpertType::Softmotion, "mcSysApi");
202    }
203}