alarm_dot_com/models/
device.rs1use serde::{Deserialize, Serialize};
4use std::fmt;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
8pub enum ResourceType {
9 Partition,
10 Sensor,
11 Lock,
12 GarageDoor,
13 Gate,
14 Light,
15 Thermostat,
16 Camera,
17 WaterSensor,
18 WaterValve,
19 System,
20 ImageSensor,
21}
22
23impl ResourceType {
24 pub fn api_path(&self) -> &'static str {
26 match self {
27 ResourceType::Partition => "devices/partitions",
28 ResourceType::Sensor => "devices/sensors",
29 ResourceType::Lock => "devices/locks",
30 ResourceType::GarageDoor => "devices/garageDoors",
31 ResourceType::Gate => "devices/gates",
32 ResourceType::Light => "devices/lights",
33 ResourceType::Thermostat => "devices/thermostats",
34 ResourceType::Camera => "devices/cameras",
35 ResourceType::WaterSensor => "devices/waterSensors",
36 ResourceType::WaterValve => "devices/waterValves",
37 ResourceType::System => "systems/systems",
38 ResourceType::ImageSensor => "devices/imageSensors",
39 }
40 }
41
42 pub fn type_string(&self) -> &'static str {
44 match self {
45 ResourceType::Partition => "devices/partition",
46 ResourceType::Sensor => "devices/sensor",
47 ResourceType::Lock => "devices/lock",
48 ResourceType::GarageDoor => "devices/garageDoor",
49 ResourceType::Gate => "devices/gate",
50 ResourceType::Light => "devices/light",
51 ResourceType::Thermostat => "devices/thermostat",
52 ResourceType::Camera => "devices/camera",
53 ResourceType::WaterSensor => "devices/waterSensor",
54 ResourceType::WaterValve => "devices/waterValve",
55 ResourceType::System => "systems/system",
56 ResourceType::ImageSensor => "devices/imageSensor",
57 }
58 }
59}
60
61impl fmt::Display for ResourceType {
62 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
63 write!(f, "{:?}", self)
64 }
65}
66
67#[derive(Debug, Clone, Deserialize, Serialize)]
69#[serde(rename_all = "camelCase")]
70pub struct BaseDeviceAttributes {
71 #[serde(default)]
72 pub description: Option<String>,
73 #[serde(default)]
74 pub has_permission: Option<bool>,
75 #[serde(default)]
76 pub can_be_renamed: Option<bool>,
77 #[serde(default)]
78 pub can_be_saved: Option<bool>,
79 #[serde(default)]
80 pub can_access_web_settings: Option<bool>,
81 #[serde(default)]
82 pub can_access_app_settings: Option<bool>,
83 #[serde(default)]
84 pub mac_address: Option<String>,
85}
86
87pub trait Device {
89 fn id(&self) -> &str;
90 fn name(&self) -> &str;
91 fn resource_type() -> ResourceType;
92}