freedom_models/
band.rs

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}