1use serde::{Deserialize, Serialize};
4
5use crate::{
6 error::{ApiError, Error},
7 AsyncRobot,
8};
9
10use super::{server::ServerId, wrapper::Single, UnauthenticatedRequest};
11
12fn get_wake_on_lan(server_number: ServerId) -> UnauthenticatedRequest<Single<Wol>> {
13 UnauthenticatedRequest::from(&format!(
14 "https://robot-ws.your-server.de/wol/{server_number}"
15 ))
16}
17
18fn post_wake_on_lan(server_number: ServerId) -> UnauthenticatedRequest<Single<Wol>> {
19 UnauthenticatedRequest::from(&format!(
20 "https://robot-ws.your-server.de/wol/{server_number}"
21 ))
22 .with_method("POST")
23}
24
25impl AsyncRobot {
26 pub async fn is_wake_on_lan_available(&self, server_number: ServerId) -> Result<bool, Error> {
38 let response = self.go(get_wake_on_lan(server_number)).await;
39
40 match response {
41 Ok(_) => Ok(true),
42 Err(Error::Api(ApiError::WolNotAvailable { .. })) => Ok(false),
43 Err(e) => Err(e),
44 }
45 }
46
47 pub async fn trigger_wake_on_lan(&self, server_number: ServerId) -> Result<(), Error> {
59 self.go(post_wake_on_lan(server_number)).await.map(|_| ())
60 }
61}
62
63#[derive(Debug, Serialize, Deserialize)]
66struct Wol {
67 #[serde(rename = "server_number")]
68 _server_number: ServerId,
69}