freedom_models/
satellite.rs

1#[cfg(feature = "serde")]
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4use time::OffsetDateTime;
5use url::Url;
6
7use crate::Hateoas;
8
9#[cfg(feature = "serde")]
10use super::utils;
11
12#[cfg_attr(
13    feature = "serde",
14    derive(Serialize, Deserialize),
15    serde(rename_all = "camelCase")
16)]
17#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
18#[cfg_attr(not(feature = "unstable"), non_exhaustive)]
19pub struct TwoLineElement {
20    pub line1: String,
21    pub line2: String,
22}
23
24/// The Freedom API representation of a satellite.
25#[cfg_attr(
26    feature = "serde",
27    derive(Serialize, Deserialize),
28    serde(rename_all = "camelCase")
29)]
30#[derive(Debug, Clone, PartialEq, Eq)]
31#[cfg_attr(not(feature = "unstable"), non_exhaustive)]
32pub struct Satellite {
33    #[cfg_attr(feature = "serde", serde(with = "time::serde::iso8601"))]
34    pub created: OffsetDateTime,
35    #[cfg_attr(
36        feature = "serde",
37        serde(default, with = "time::serde::iso8601::option")
38    )]
39    pub modified: Option<OffsetDateTime>,
40    pub name: String,
41    pub description: String,
42    #[cfg_attr(feature = "serde", serde(default))]
43    pub norad_cat_id: Option<u32>,
44    #[cfg_attr(feature = "serde", serde(default))]
45    pub tle: Option<TwoLineElement>,
46    #[cfg_attr(feature = "serde", serde(default))]
47    pub internal_meta_data: Option<HashMap<String, String>>,
48    pub account_name: String,
49    #[cfg_attr(feature = "serde", serde(default))]
50    pub meta_data: Option<HashMap<String, String>>,
51    #[cfg_attr(
52        feature = "serde",
53        serde(rename = "_links", with = "utils::links::serde", default)
54    )]
55    pub links: HashMap<String, Url>,
56}
57
58impl Hateoas for Satellite {
59    fn get_links(&self) -> &HashMap<String, url::Url> {
60        &self.links
61    }
62
63    fn get_links_mut(&mut self) -> &mut HashMap<String, url::Url> {
64        &mut self.links
65    }
66}