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)]
18pub struct TwoLineElement {
19    pub line1: String,
20    pub line2: String,
21}
22
23/// The Freedom API representation of a satellite.
24#[cfg_attr(
25    feature = "serde",
26    derive(Serialize, Deserialize),
27    serde(rename_all = "camelCase")
28)]
29#[derive(Debug, Clone, PartialEq, Eq)]
30pub struct Satellite {
31    #[cfg_attr(feature = "serde", serde(with = "time::serde::iso8601"))]
32    pub created: OffsetDateTime,
33    #[cfg_attr(
34        feature = "serde",
35        serde(default, with = "time::serde::iso8601::option")
36    )]
37    pub modified: Option<OffsetDateTime>,
38    pub name: String,
39    pub description: String,
40    #[cfg_attr(feature = "serde", serde(default))]
41    pub norad_cat_id: Option<u32>,
42    #[cfg_attr(feature = "serde", serde(default))]
43    pub tle: Option<TwoLineElement>,
44    #[cfg_attr(feature = "serde", serde(default))]
45    pub internal_meta_data: Option<HashMap<String, String>>,
46    pub account_name: String,
47    #[cfg_attr(feature = "serde", serde(default))]
48    pub meta_data: Option<HashMap<String, String>>,
49    #[cfg_attr(
50        feature = "serde",
51        serde(rename = "_links", with = "utils::links::serde", default)
52    )]
53    pub links: HashMap<String, Url>,
54}
55
56impl Hateoas for Satellite {
57    fn get_links(&self) -> &HashMap<String, url::Url> {
58        &self.links
59    }
60
61    fn get_links_mut(&mut self) -> &mut HashMap<String, url::Url> {
62        &mut self.links
63    }
64}