1#[cfg(feature = "serde")]
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4use strum::{AsRefStr, EnumString};
5use time::OffsetDateTime;
6use url::Url;
7
8use crate::Hateoas;
9
10#[cfg(feature = "serde")]
11use super::utils;
12
13#[cfg_attr(
14 feature = "serde",
15 derive(Serialize, Deserialize),
16 serde(rename_all = "SCREAMING_SNAKE_CASE")
17)]
18#[derive(Debug, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, AsRefStr, EnumString)]
19#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
20#[non_exhaustive]
21pub enum BandType {
22 Transmit,
23 Receive,
24}
25
26#[cfg_attr(
27 feature = "serde",
28 derive(Serialize, Deserialize),
29 serde(rename_all = "SCREAMING_SNAKE_CASE")
30)]
31#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, AsRefStr, EnumString)]
32#[strum(serialize_all = "SCREAMING_SNAKE_CASE")]
33#[non_exhaustive]
34pub enum IoHardware {
35 Modem,
36 Fep,
37 Cortex,
38 Recorder,
39 #[strum(default)]
40 #[cfg_attr(feature = "serde", serde(untagged))]
41 Other(String),
42}
43
44#[cfg_attr(
45 feature = "serde",
46 derive(Serialize, Deserialize),
47 serde(rename_all = "camelCase")
48)]
49#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
50pub struct IoConfiguration {
51 #[cfg_attr(feature = "serde", serde(default))]
52 pub start_hex_pattern: Option<String>,
53 #[cfg_attr(feature = "serde", serde(default))]
54 pub end_hex_pattern: Option<String>,
55 pub strip_pattern: bool,
56 #[cfg_attr(feature = "serde", serde(default))]
57 pub io_hardware: Option<IoHardware>,
58}
59
60#[cfg_attr(
61 feature = "serde",
62 derive(Serialize, Deserialize),
63 serde(rename_all = "camelCase")
64)]
65#[derive(Debug, Clone, PartialEq)]
66pub struct Band {
67 #[cfg_attr(feature = "serde", serde(with = "time::serde::iso8601"))]
68 pub created: OffsetDateTime,
69 #[cfg_attr(
70 feature = "serde",
71 serde(default, with = "time::serde::iso8601::option")
72 )]
73 pub modified: Option<OffsetDateTime>,
74 pub name: String,
75 #[cfg_attr(feature = "serde", serde(rename = "type", default))]
76 pub typ: Option<BandType>,
77 pub frequency_mghz: f64,
78 pub default_band_width_mghz: f64,
79 pub io_configuration: IoConfiguration,
80 #[cfg_attr(feature = "serde", serde(default))]
81 pub manual_transmit_control: Option<bool>,
82 #[cfg_attr(feature = "serde", serde(default))]
83 pub account_name: Option<String>,
84 #[cfg_attr(
85 feature = "serde",
86 serde(rename = "_links", with = "utils::links::serde", default)
87 )]
88 pub links: HashMap<String, Url>,
89}
90
91impl Hateoas for Band {
92 fn get_links(&self) -> &HashMap<String, url::Url> {
93 &self.links
94 }
95
96 fn get_links_mut(&mut self) -> &mut HashMap<String, url::Url> {
97 &mut self.links
98 }
99}