bodo_connect/waker/
mod.rs1use 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}