1use serde::{Deserialize, Serialize};
12pub mod annotation;
13pub mod link;
14pub mod panel;
15pub mod templating;
16
17use annotation::Annotations;
18use link::Link;
19use panel::Panel;
20use templating::Templating;
21
22#[derive(Debug, Clone, Serialize, Deserialize)]
23pub struct Dashboard {
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub annotations: Option<Annotations>,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub description: Option<String>,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub editable: Option<bool>,
30 #[serde(rename = "gnetId")]
31 pub gnet_id: Option<u32>,
32 #[serde(rename = "graphTooltip")]
33 #[serde(skip_serializing_if = "Option::is_none")]
34 pub graph_tooltip: Option<u32>,
35 #[serde(rename = "hideControls")]
36 #[serde(skip_serializing_if = "Option::is_none")]
37 pub hide_controls: Option<bool>,
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub id: Option<String>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub links: Option<Vec<Link>>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub panels: Option<Vec<Panel>>,
44 #[serde(skip_serializing_if = "Option::is_none")]
45 pub refresh: Option<String>,
46 #[serde(rename = "schemaVersion")]
47 #[serde(skip_serializing_if = "Option::is_none")]
48 pub schema_version: Option<u32>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 pub style: Option<String>,
51 #[serde(skip_serializing_if = "Option::is_none")]
52 pub tags: Option<Vec<String>>,
53 #[serde(skip_serializing_if = "Option::is_none")]
54 pub templating: Option<Templating>,
55 #[serde(skip_serializing_if = "Option::is_none")]
56 pub time: Option<Time>,
57 #[serde(skip_serializing_if = "Option::is_none")]
58 pub timepicker: Option<TimePicker>,
59 #[serde(skip_serializing_if = "Option::is_none")]
60 pub timezone: Option<String>,
61 #[serde(skip_serializing_if = "Option::is_none")]
62 pub title: Option<String>,
63 #[serde(skip_serializing_if = "Option::is_none")]
64 pub uid: Option<String>,
65 pub variables: Variables,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub version: Option<u32>,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize)]
71pub struct Variables {
72 pub list: Vec<Variable>,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
76pub struct Variable {
77 }
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
81pub struct Time {
82 #[serde(skip_serializing_if = "Option::is_none")]
83 pub from: Option<String>,
84 pub to: Option<String>,
85}
86
87#[derive(Debug, Clone, Serialize, Deserialize)]
88pub struct TimePicker {
89 #[serde(skip_serializing_if = "Option::is_none")]
90 pub collapse: Option<bool>,
91 #[serde(skip_serializing_if = "Option::is_none")]
92 pub enable: Option<bool>,
93 #[serde(skip_serializing_if = "Option::is_none")]
94 pub notice: Option<bool>,
95 #[serde(skip_serializing_if = "Option::is_none")]
96 pub now: Option<bool>,
97 #[serde(skip_serializing_if = "Option::is_none")]
98 pub refresh_intervals: Option<Vec<String>>,
99 #[serde(skip_serializing_if = "Option::is_none")]
100 pub status: Option<String>,
101 #[serde(skip_serializing_if = "Option::is_none")]
102 pub r#type: Option<String>,
103}
104
105#[cfg(test)]
106mod utils;
107
108#[cfg(test)]
109mod tests {
110 use super::*;
111 use crate::utils::collapse;
112 use pretty_assertions::assert_eq;
113 use serde_json;
114 #[test]
117 pub fn test_x() {
118 let json = collapse(r##""##);
119 let structure: Panel = serde_json::from_str(json.as_str()).expect("failed to stringify");
120 assert_eq!(
121 json,
122 serde_json::to_string(&structure).expect("failed to stringify structure")
123 );
124 }
125}