freedom_models/
satellite.rs1#[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#[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}