Skip to main content

rufish/
types.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4/// Common Redfish resource status.
5#[derive(Debug, Clone, Serialize, Deserialize, Default)]
6#[serde(rename_all = "PascalCase")]
7pub struct Status {
8    pub state: Option<String>,
9    pub health: Option<String>,
10    pub health_rollup: Option<String>,
11}
12
13/// Service Root (/redfish/v1/)
14#[derive(Debug, Clone, Serialize, Deserialize)]
15#[serde(rename_all = "PascalCase")]
16pub struct ServiceRoot {
17    #[serde(rename = "@odata.id")]
18    pub odata_id: Option<String>,
19    pub id: Option<String>,
20    pub name: Option<String>,
21    pub redfish_version: Option<String>,
22    pub systems: Option<OdataLink>,
23    pub chassis: Option<OdataLink>,
24    pub managers: Option<OdataLink>,
25    pub session_service: Option<OdataLink>,
26    pub account_service: Option<OdataLink>,
27    pub update_service: Option<OdataLink>,
28    pub event_service: Option<OdataLink>,
29}
30
31/// OData link reference.
32#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct OdataLink {
34    #[serde(rename = "@odata.id")]
35    pub odata_id: String,
36}
37
38/// Collection of resources.
39#[derive(Debug, Clone, Serialize, Deserialize)]
40#[serde(rename_all = "PascalCase")]
41pub struct Collection {
42    #[serde(rename = "@odata.id")]
43    pub odata_id: Option<String>,
44    pub name: Option<String>,
45    #[serde(rename = "Members@odata.count")]
46    pub members_count: Option<u32>,
47    #[serde(rename = "Members")]
48    pub members: Option<Vec<OdataLink>>,
49}
50
51/// Computer System resource.
52#[derive(Debug, Clone, Serialize, Deserialize)]
53#[serde(rename_all = "PascalCase")]
54pub struct ComputerSystem {
55    #[serde(rename = "@odata.id")]
56    pub odata_id: Option<String>,
57    pub id: Option<String>,
58    pub name: Option<String>,
59    pub manufacturer: Option<String>,
60    pub model: Option<String>,
61    pub serial_number: Option<String>,
62    pub uuid: Option<String>,
63    pub host_name: Option<String>,
64    pub power_state: Option<String>,
65    pub bios_version: Option<String>,
66    pub status: Option<Status>,
67    pub boot: Option<Boot>,
68    pub processor_summary: Option<ProcessorSummary>,
69    pub memory_summary: Option<MemorySummary>,
70    pub processors: Option<OdataLink>,
71    pub memory: Option<OdataLink>,
72    pub storage: Option<OdataLink>,
73    pub ethernet_interfaces: Option<OdataLink>,
74    pub network_interfaces: Option<OdataLink>,
75    pub bios: Option<OdataLink>,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize)]
79#[serde(rename_all = "PascalCase")]
80pub struct Boot {
81    pub boot_source_override_target: Option<String>,
82    pub boot_source_override_enabled: Option<String>,
83    pub boot_source_override_mode: Option<String>,
84}
85
86#[derive(Debug, Clone, Serialize, Deserialize)]
87#[serde(rename_all = "PascalCase")]
88pub struct ProcessorSummary {
89    pub count: Option<u32>,
90    pub model: Option<String>,
91    pub status: Option<Status>,
92}
93
94#[derive(Debug, Clone, Serialize, Deserialize)]
95#[serde(rename_all = "PascalCase")]
96pub struct MemorySummary {
97    pub total_system_memory_gi_b: Option<f64>,
98    pub status: Option<Status>,
99}
100
101/// Chassis resource.
102#[derive(Debug, Clone, Serialize, Deserialize)]
103#[serde(rename_all = "PascalCase")]
104pub struct Chassis {
105    #[serde(rename = "@odata.id")]
106    pub odata_id: Option<String>,
107    pub id: Option<String>,
108    pub name: Option<String>,
109    pub chassis_type: Option<String>,
110    pub manufacturer: Option<String>,
111    pub model: Option<String>,
112    pub serial_number: Option<String>,
113    pub part_number: Option<String>,
114    pub power_state: Option<String>,
115    pub status: Option<Status>,
116    pub thermal: Option<OdataLink>,
117    pub power: Option<OdataLink>,
118}
119
120/// Manager (BMC) resource.
121#[derive(Debug, Clone, Serialize, Deserialize)]
122#[serde(rename_all = "PascalCase")]
123pub struct Manager {
124    #[serde(rename = "@odata.id")]
125    pub odata_id: Option<String>,
126    pub id: Option<String>,
127    pub name: Option<String>,
128    pub manager_type: Option<String>,
129    pub firmware_version: Option<String>,
130    pub status: Option<Status>,
131    pub ethernet_interfaces: Option<OdataLink>,
132    pub network_protocol: Option<OdataLink>,
133    pub log_services: Option<OdataLink>,
134}
135
136/// Power resource (legacy schema).
137#[derive(Debug, Clone, Serialize, Deserialize)]
138#[serde(rename_all = "PascalCase")]
139pub struct Power {
140    #[serde(rename = "@odata.id")]
141    pub odata_id: Option<String>,
142    pub power_control: Option<Vec<PowerControl>>,
143    pub power_supplies: Option<Vec<PowerSupply>>,
144}
145
146#[derive(Debug, Clone, Serialize, Deserialize)]
147#[serde(rename_all = "PascalCase")]
148pub struct PowerControl {
149    pub name: Option<String>,
150    pub power_consumed_watts: Option<f64>,
151    pub power_capacity_watts: Option<f64>,
152}
153
154#[derive(Debug, Clone, Serialize, Deserialize)]
155#[serde(rename_all = "PascalCase")]
156pub struct PowerSupply {
157    pub name: Option<String>,
158    pub power_capacity_watts: Option<f64>,
159    pub model: Option<String>,
160    pub serial_number: Option<String>,
161    pub status: Option<Status>,
162}
163
164/// Thermal resource (legacy schema).
165#[derive(Debug, Clone, Serialize, Deserialize)]
166#[serde(rename_all = "PascalCase")]
167pub struct Thermal {
168    #[serde(rename = "@odata.id")]
169    pub odata_id: Option<String>,
170    pub temperatures: Option<Vec<Temperature>>,
171    pub fans: Option<Vec<Fan>>,
172}
173
174#[derive(Debug, Clone, Serialize, Deserialize)]
175#[serde(rename_all = "PascalCase")]
176pub struct Temperature {
177    pub name: Option<String>,
178    pub reading_celsius: Option<f64>,
179    pub upper_threshold_critical: Option<f64>,
180    pub upper_threshold_fatal: Option<f64>,
181    pub status: Option<Status>,
182}
183
184#[derive(Debug, Clone, Serialize, Deserialize)]
185#[serde(rename_all = "PascalCase")]
186pub struct Fan {
187    pub name: Option<String>,
188    pub reading: Option<f64>,
189    pub reading_units: Option<String>,
190    pub status: Option<Status>,
191}
192
193/// Processor resource.
194#[derive(Debug, Clone, Serialize, Deserialize)]
195#[serde(rename_all = "PascalCase")]
196pub struct Processor {
197    #[serde(rename = "@odata.id")]
198    pub odata_id: Option<String>,
199    pub id: Option<String>,
200    pub name: Option<String>,
201    pub manufacturer: Option<String>,
202    pub model: Option<String>,
203    pub total_cores: Option<u32>,
204    pub total_threads: Option<u32>,
205    pub max_speed_m_hz: Option<u32>,
206    pub status: Option<Status>,
207}
208
209/// Memory resource.
210#[derive(Debug, Clone, Serialize, Deserialize)]
211#[serde(rename_all = "PascalCase")]
212pub struct Memory {
213    #[serde(rename = "@odata.id")]
214    pub odata_id: Option<String>,
215    pub id: Option<String>,
216    pub name: Option<String>,
217    pub memory_device_type: Option<String>,
218    pub capacity_mi_b: Option<u64>,
219    pub operating_speed_mhz: Option<u32>,
220    pub manufacturer: Option<String>,
221    pub serial_number: Option<String>,
222    pub status: Option<Status>,
223}
224
225/// Storage resource.
226#[derive(Debug, Clone, Serialize, Deserialize)]
227#[serde(rename_all = "PascalCase")]
228pub struct Storage {
229    #[serde(rename = "@odata.id")]
230    pub odata_id: Option<String>,
231    pub id: Option<String>,
232    pub name: Option<String>,
233    pub drives: Option<Vec<OdataLink>>,
234    pub storage_controllers: Option<Vec<StorageController>>,
235}
236
237#[derive(Debug, Clone, Serialize, Deserialize)]
238#[serde(rename_all = "PascalCase")]
239pub struct StorageController {
240    pub member_id: Option<String>,
241    pub name: Option<String>,
242    pub manufacturer: Option<String>,
243    pub model: Option<String>,
244    pub firmware_version: Option<String>,
245    pub status: Option<Status>,
246}
247
248/// Drive resource.
249#[derive(Debug, Clone, Serialize, Deserialize)]
250#[serde(rename_all = "PascalCase")]
251pub struct Drive {
252    #[serde(rename = "@odata.id")]
253    pub odata_id: Option<String>,
254    pub id: Option<String>,
255    pub name: Option<String>,
256    pub manufacturer: Option<String>,
257    pub model: Option<String>,
258    pub serial_number: Option<String>,
259    pub capacity_bytes: Option<u64>,
260    pub media_type: Option<String>,
261    pub protocol: Option<String>,
262    pub status: Option<Status>,
263}
264
265/// EthernetInterface resource.
266#[derive(Debug, Clone, Serialize, Deserialize)]
267#[serde(rename_all = "PascalCase")]
268pub struct EthernetInterface {
269    #[serde(rename = "@odata.id")]
270    pub odata_id: Option<String>,
271    pub id: Option<String>,
272    pub name: Option<String>,
273    #[serde(rename = "MACAddress")]
274    pub mac_address: Option<String>,
275    pub speed_mbps: Option<u32>,
276    pub status: Option<Status>,
277    #[serde(rename = "IPv4Addresses")]
278    pub ipv4_addresses: Option<Vec<Value>>,
279    #[serde(rename = "IPv6Addresses")]
280    pub ipv6_addresses: Option<Vec<Value>>,
281}
282
283/// Account Service resource.
284#[derive(Debug, Clone, Serialize, Deserialize)]
285#[serde(rename_all = "PascalCase")]
286pub struct AccountService {
287    #[serde(rename = "@odata.id")]
288    pub odata_id: Option<String>,
289    pub accounts: Option<OdataLink>,
290    pub roles: Option<OdataLink>,
291}
292
293/// User Account resource.
294#[derive(Debug, Clone, Serialize, Deserialize)]
295#[serde(rename_all = "PascalCase")]
296pub struct Account {
297    #[serde(rename = "@odata.id")]
298    pub odata_id: Option<String>,
299    pub id: Option<String>,
300    pub name: Option<String>,
301    pub user_name: Option<String>,
302    pub role_id: Option<String>,
303    pub enabled: Option<bool>,
304    pub locked: Option<bool>,
305}
306
307/// Update Service resource.
308#[derive(Debug, Clone, Serialize, Deserialize)]
309#[serde(rename_all = "PascalCase")]
310pub struct UpdateService {
311    #[serde(rename = "@odata.id")]
312    pub odata_id: Option<String>,
313    pub firmware_inventory: Option<OdataLink>,
314    pub software_inventory: Option<OdataLink>,
315    pub service_enabled: Option<bool>,
316}
317
318/// Event Service resource.
319#[derive(Debug, Clone, Serialize, Deserialize)]
320#[serde(rename_all = "PascalCase")]
321pub struct EventService {
322    #[serde(rename = "@odata.id")]
323    pub odata_id: Option<String>,
324    pub service_enabled: Option<bool>,
325    pub subscriptions: Option<OdataLink>,
326}
327
328/// Log Entry resource.
329#[derive(Debug, Clone, Serialize, Deserialize)]
330#[serde(rename_all = "PascalCase")]
331pub struct LogEntry {
332    #[serde(rename = "@odata.id")]
333    pub odata_id: Option<String>,
334    pub id: Option<String>,
335    pub name: Option<String>,
336    pub created: Option<String>,
337    pub entry_type: Option<String>,
338    pub severity: Option<String>,
339    pub message: Option<String>,
340    pub message_id: Option<String>,
341}
342
343/// Task resource.
344#[derive(Debug, Clone, Serialize, Deserialize)]
345#[serde(rename_all = "PascalCase")]
346pub struct Task {
347    #[serde(rename = "@odata.id")]
348    pub odata_id: Option<String>,
349    pub id: Option<String>,
350    pub name: Option<String>,
351    pub task_state: Option<String>,
352    pub start_time: Option<String>,
353    pub end_time: Option<String>,
354    pub task_status: Option<String>,
355}
356
357/// Session creation request body.
358#[derive(Debug, Serialize)]
359#[serde(rename_all = "PascalCase")]
360pub struct SessionCreate {
361    pub user_name: String,
362    pub password: String,
363}
364
365/// Reset request body.
366#[derive(Debug, Serialize)]
367#[serde(rename_all = "PascalCase")]
368pub struct ResetRequest {
369    pub reset_type: String,
370}
371
372/// Boot override request body.
373#[derive(Debug, Serialize)]
374#[serde(rename_all = "PascalCase")]
375pub struct BootOverride {
376    pub boot: BootOverrideInner,
377}
378
379#[derive(Debug, Serialize)]
380#[serde(rename_all = "PascalCase")]
381pub struct BootOverrideInner {
382    pub boot_source_override_target: String,
383    pub boot_source_override_enabled: Option<String>,
384}
385
386/// Virtual Media resource.
387#[derive(Debug, Clone, Serialize, Deserialize)]
388#[serde(rename_all = "PascalCase")]
389pub struct VirtualMedia {
390    #[serde(rename = "@odata.id")]
391    pub odata_id: Option<String>,
392    pub id: Option<String>,
393    pub name: Option<String>,
394    pub media_types: Option<Vec<String>>,
395    pub image: Option<String>,
396    pub image_name: Option<String>,
397    pub inserted: Option<bool>,
398    pub connected_via: Option<String>,
399    pub write_protected: Option<bool>,
400}
401
402/// BIOS resource.
403#[derive(Debug, Clone, Serialize, Deserialize)]
404#[serde(rename_all = "PascalCase")]
405pub struct Bios {
406    #[serde(rename = "@odata.id")]
407    pub odata_id: Option<String>,
408    pub id: Option<String>,
409    pub name: Option<String>,
410    pub attributes: Option<serde_json::Value>,
411}
412
413/// Network Protocol resource (BMC network services).
414#[derive(Debug, Clone, Serialize, Deserialize)]
415#[serde(rename_all = "PascalCase")]
416pub struct NetworkProtocol {
417    #[serde(rename = "@odata.id")]
418    pub odata_id: Option<String>,
419    pub host_name: Option<String>,
420    #[serde(rename = "FQDN")]
421    pub fqdn: Option<String>,
422    #[serde(rename = "HTTP")]
423    pub http: Option<ProtocolEnabled>,
424    #[serde(rename = "HTTPS")]
425    pub https: Option<ProtocolEnabled>,
426    #[serde(rename = "SSH")]
427    pub ssh: Option<ProtocolEnabled>,
428    #[serde(rename = "IPMI")]
429    pub ipmi: Option<ProtocolEnabled>,
430    #[serde(rename = "KVMIP")]
431    pub kvmip: Option<ProtocolEnabled>,
432    #[serde(rename = "NTP")]
433    pub ntp: Option<NtpProtocol>,
434}
435
436#[derive(Debug, Clone, Serialize, Deserialize)]
437#[serde(rename_all = "PascalCase")]
438pub struct ProtocolEnabled {
439    pub protocol_enabled: Option<bool>,
440    pub port: Option<u16>,
441}
442
443#[derive(Debug, Clone, Serialize, Deserialize)]
444#[serde(rename_all = "PascalCase")]
445pub struct NtpProtocol {
446    pub protocol_enabled: Option<bool>,
447    #[serde(rename = "NTPServers")]
448    pub ntp_servers: Option<Vec<String>>,
449}
450
451/// Secure Boot resource.
452#[derive(Debug, Clone, Serialize, Deserialize)]
453#[serde(rename_all = "PascalCase")]
454pub struct SecureBoot {
455    #[serde(rename = "@odata.id")]
456    pub odata_id: Option<String>,
457    pub secure_boot_enable: Option<bool>,
458    pub secure_boot_current_boot: Option<String>,
459    pub secure_boot_mode: Option<String>,
460}
461
462/// Volume resource (RAID).
463#[derive(Debug, Clone, Serialize, Deserialize)]
464#[serde(rename_all = "PascalCase")]
465pub struct Volume {
466    #[serde(rename = "@odata.id")]
467    pub odata_id: Option<String>,
468    pub id: Option<String>,
469    pub name: Option<String>,
470    pub capacity_bytes: Option<u64>,
471    pub volume_type: Option<String>,
472    #[serde(rename = "RAIDType")]
473    pub raid_type: Option<String>,
474    pub status: Option<Status>,
475    pub drives: Option<Vec<OdataLink>>,
476}
477
478/// Certificate resource.
479#[derive(Debug, Clone, Serialize, Deserialize)]
480#[serde(rename_all = "PascalCase")]
481pub struct Certificate {
482    #[serde(rename = "@odata.id")]
483    pub odata_id: Option<String>,
484    pub id: Option<String>,
485    pub certificate_string: Option<String>,
486    pub certificate_type: Option<String>,
487    pub issuer: Option<serde_json::Value>,
488    pub subject: Option<serde_json::Value>,
489    pub valid_not_before: Option<String>,
490    pub valid_not_after: Option<String>,
491}
492
493/// Event Destination (subscription).
494#[derive(Debug, Clone, Serialize, Deserialize)]
495#[serde(rename_all = "PascalCase")]
496pub struct EventDestination {
497    #[serde(rename = "@odata.id")]
498    pub odata_id: Option<String>,
499    pub id: Option<String>,
500    pub destination: Option<String>,
501    pub protocol: Option<String>,
502    pub event_types: Option<Vec<String>>,
503    pub context: Option<String>,
504}
505
506/// Serial Interface resource.
507#[derive(Debug, Clone, Serialize, Deserialize)]
508#[serde(rename_all = "PascalCase")]
509pub struct SerialInterface {
510    #[serde(rename = "@odata.id")]
511    pub odata_id: Option<String>,
512    pub id: Option<String>,
513    pub bit_rate: Option<String>,
514    pub data_bits: Option<String>,
515    pub parity: Option<String>,
516    pub stop_bits: Option<String>,
517    pub flow_control: Option<String>,
518    pub interface_enabled: Option<bool>,
519}
520
521/// Software/Firmware Inventory item.
522#[derive(Debug, Clone, Serialize, Deserialize)]
523#[serde(rename_all = "PascalCase")]
524pub struct SoftwareInventory {
525    #[serde(rename = "@odata.id")]
526    pub odata_id: Option<String>,
527    pub id: Option<String>,
528    pub name: Option<String>,
529    pub version: Option<String>,
530    pub updateable: Option<bool>,
531    pub status: Option<Status>,
532}