tanuki_common/capabilities/
on_off.rs1use crate::{Property, property};
14
15pub trait OnOffProperty: Property {}
16pub trait OnOffCommandTrait: Property {}
17
18#[property(OnOffProperty, State, key = "on")]
19#[derive(Copy, Eq)]
20pub struct On(pub bool);
21
22#[property(OnOffProperty, Command, key = "command")]
23#[derive(Copy, Eq)]
24#[serde(rename_all = "snake_case")]
25pub enum OnOffCommand {
26 On,
27 Off,
28 Toggle,
29}
30
31#[cfg(test)]
32mod tests {
33 use super::*;
34
35 #[test]
36 fn on_property_format() {
37 assert_eq!(serde_json::to_value(On(true)).unwrap(), serde_json::json!(true));
38 assert_eq!(serde_json::to_value(On(false)).unwrap(), serde_json::json!(false));
39 }
40
41 #[test]
42 fn on_off_command_format() {
43 assert_eq!(serde_json::to_value(OnOffCommand::On).unwrap(), serde_json::json!("on"));
44 assert_eq!(serde_json::to_value(OnOffCommand::Off).unwrap(), serde_json::json!("off"));
45 assert_eq!(
46 serde_json::to_value(OnOffCommand::Toggle).unwrap(),
47 serde_json::json!("toggle")
48 );
49 }
50}