Skip to main content

eero_api/types/
profile.rs

1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Default, Deserialize, Serialize)]
6pub struct Profile {
7    pub url: String,
8    #[serde(default)]
9    pub name: Option<String>,
10    #[serde(default)]
11    pub paused: Option<bool>,
12    #[serde(default)]
13    pub blocked_applications: Option<serde_json::Value>,
14    #[serde(default)]
15    pub dns_policies: Option<serde_json::Value>,
16    #[serde(default)]
17    pub devices: Option<Vec<ProfileDevice>>,
18    #[serde(default)]
19    pub schedule: Option<serde_json::Value>,
20    #[serde(flatten)]
21    pub extra: HashMap<String, serde_json::Value>,
22}
23
24#[derive(Debug, Clone, Deserialize, Serialize)]
25pub struct DnsPolicies {
26    #[serde(default)]
27    pub block: Option<Vec<String>>,
28    #[serde(default)]
29    pub safe_search_enabled: Option<bool>,
30    #[serde(default)]
31    pub youtube_restricted: Option<bool>,
32    #[serde(flatten)]
33    pub extra: HashMap<String, serde_json::Value>,
34}
35
36#[derive(Debug, Clone, Deserialize, Serialize)]
37pub struct ProfileDevice {
38    pub url: Option<String>,
39    pub mac: Option<String>,
40    pub display_name: Option<String>,
41}
42
43#[derive(Debug, Clone, Deserialize, Serialize)]
44pub struct ProfileSchedule {
45    #[serde(default)]
46    pub enabled: Option<bool>,
47    #[serde(default)]
48    pub time_ranges: Option<Vec<serde_json::Value>>,
49    #[serde(flatten)]
50    pub extra: HashMap<String, serde_json::Value>,
51}
52
53#[derive(Debug, Clone, Default, Serialize)]
54pub struct ProfileUpdate {
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub name: Option<String>,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub paused: Option<bool>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    pub blocked_applications: Option<Vec<String>>,
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub dns_policies: Option<DnsPoliciesUpdate>,
63    #[serde(skip_serializing_if = "Option::is_none")]
64    pub schedule: Option<ProfileScheduleUpdate>,
65}
66
67#[derive(Debug, Clone, Default, Serialize)]
68pub struct DnsPoliciesUpdate {
69    #[serde(skip_serializing_if = "Option::is_none")]
70    pub block: Option<Vec<String>>,
71    #[serde(skip_serializing_if = "Option::is_none")]
72    pub safe_search_enabled: Option<bool>,
73    #[serde(skip_serializing_if = "Option::is_none")]
74    pub youtube_restricted: Option<bool>,
75}
76
77#[derive(Debug, Clone, Default, Serialize)]
78pub struct ProfileScheduleUpdate {
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub enabled: Option<bool>,
81    #[serde(skip_serializing_if = "Option::is_none")]
82    pub time_ranges: Option<Vec<serde_json::Value>>,
83}