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)]
18#[cfg_attr(not(feature = "unstable"), non_exhaustive)]
19pub struct TwoLineElement {
20 pub line1: String,
21 pub line2: String,
22}
23
24#[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}