bodo_connect/waker/
mod.rs

1use mac_address::MacAddress;
2use reqwest::Method;
3#[cfg(feature = "serde")]
4use serde::{de::Error, {Deserialize, Deserializer, Serialize, Serializer}};
5#[cfg(feature = "serde")]
6use std::str::FromStr;
7
8#[cfg_attr(feature = "serde", derive(Deserialize,Serialize))]
9#[derive(Debug)]
10#[cfg_attr(feature = "serde", serde(untagged))]
11pub enum Waker {
12    WolWaker {
13        #[cfg_attr(feature = "serde", serde(deserialize_with = "mac_parser", serialize_with = "mac_serializer"))]
14        mac: MacAddress,
15    },
16    HttpWaker {
17        #[cfg_attr(feature = "serde", serde(deserialize_with = "method_parser", serialize_with = "method_serializer"))]
18        method: Method,
19        url: String,
20    },
21}
22
23#[cfg(feature = "serde")]
24pub fn mac_parser<'de, D>(deserializer: D) -> Result<MacAddress, D::Error>
25where
26    D: Deserializer<'de>,
27{
28    let method_string = String::deserialize(deserializer)?;
29    MacAddress::from_str(&method_string).map_err(Error::custom)
30}
31
32#[cfg(feature = "serde")]
33pub fn method_parser<'de, D>(deserializer: D) -> Result<Method, D::Error>
34where
35    D: Deserializer<'de>,
36{
37    let method_string = String::deserialize(deserializer)?;
38    Method::from_str(&method_string.to_uppercase()).map_err(Error::custom)
39}
40
41#[cfg(feature = "serde")]
42pub fn method_serializer<S>(m: &Method, serializer: S) -> Result<S::Ok, S::Error>
43where
44    S: Serializer,
45{
46    serializer.serialize_str(&m.to_string())
47}
48
49#[cfg(feature = "serde")]
50pub fn mac_serializer<S>(m: &MacAddress, serializer: S) -> Result<S::Ok, S::Error>
51where
52    S: Serializer,
53{
54    serializer.serialize_str(&m.to_string())
55}