fleetmod/metadata/
medadata.rs1use std::collections::HashMap;
8use chrono::{DateTime, Local};
9use serde::{Deserialize, Serialize};
10
11
12#[derive(Serialize, Deserialize, Debug, Clone, Default)]
13#[serde(rename_all = "lowercase")]
14pub struct Metadata {
15 pub name: String,
16 pub namespace: String,
17 pub labels: Option<HashMap<String, String>>,
18 pub annotations: Option<HashMap<String, String>>,
19 pub uid: Option<String>,
20 #[serde(rename = "resourceVersion")]
21 pub resource_version: Option<String>,
22 #[serde(rename = "creationTimestamp")]
23 pub creation_timestamp: Option<DateTime<Local>>,
24}
25
26impl Metadata {
27 pub fn fill_metadata_defaults(&mut self) {
28 if self.labels.is_none() {
29 self.labels = Some(HashMap::new());
30 }
31 if self.annotations.is_none() {
32 self.annotations = Some(HashMap::new());
33 }
34 if self.uid.is_none() {
35 self.uid = Some(crate::generate_uid());
36 }
37 if self.resource_version.is_none() {
38 self.resource_version = Some(crate::generate_resource_version());
39 }
40 if self.creation_timestamp.is_none() {
41 self.creation_timestamp = Some(Local::now());
42 }
43 }
44}
45
46#[cfg(test)]
47mod tests {
48 use super::*; use std::collections::HashMap;
50
51 #[test]
52 fn test_fill_metadata_defaults() {
53 let mut metadata = Metadata {
55 name: "example-metadata".to_string(),
56 namespace: "default".to_string(),
57 labels: None,
58 annotations: None,
59 uid: None,
60 resource_version: None,
61 creation_timestamp: None,
62 };
63
64 metadata.fill_metadata_defaults();
66
67 assert_eq!(metadata.name, "example-metadata");
69 assert_eq!(metadata.namespace, "default");
70
71 assert!(metadata.labels.is_some());
73 assert_eq!(metadata.labels.unwrap(), HashMap::new());
74
75 assert!(metadata.annotations.is_some());
77 assert_eq!(metadata.annotations.unwrap(), HashMap::new());
78
79 assert!(metadata.uid.is_some());
81 assert!(!metadata.uid.as_ref().unwrap().is_empty());
82
83 assert!(metadata.resource_version.is_some());
85 assert!(!metadata.resource_version.as_ref().unwrap().is_empty());
86
87 assert!(metadata.creation_timestamp.is_some());
89 }
90}
91
92
93