1use crate::client::EeroClient;
2use crate::error::Result;
3use crate::types::network::{
4 GuestNetwork, GuestNetworkUpdate, Network, NetworkUpdate, SpeedTest,
5};
6
7impl EeroClient {
8 #[tracing::instrument(skip(self))]
10 pub async fn get_network(&self, network_id: u64) -> Result<Network> {
11 let url = self.url(&format!("/networks/{network_id}"));
12 self.get(&url).await
13 }
14
15 #[tracing::instrument(skip(self))]
17 pub async fn get_network_by_url(&self, url: &str) -> Result<Network> {
18 let url = self.resource_url(url);
19 self.get(&url).await
20 }
21
22 #[tracing::instrument(skip(self, update))]
24 pub async fn update_network(
25 &self,
26 network_id: u64,
27 update: &NetworkUpdate,
28 ) -> Result<Network> {
29 let url = self.url(&format!("/networks/{network_id}"));
30 self.put(&url, update).await
31 }
32
33 #[tracing::instrument(skip(self))]
35 pub async fn reboot_network(&self, network_id: u64) -> Result<serde_json::Value> {
36 let url = self.url(&format!("/networks/{network_id}/reboot"));
37 self.post_empty(&url).await
38 }
39
40 #[tracing::instrument(skip(self))]
45 pub async fn run_speed_test(&self, network_id: u64) -> Result<serde_json::Value> {
46 let url = self.url(&format!("/networks/{network_id}/speedtest"));
47 let headers = self.session_headers().await?;
48 let resp = self
49 .http
50 .post(&url)
51 .headers(headers)
52 .send()
53 .await?;
54 let text = resp.text().await?;
55 let parsed: crate::types::envelope::ApiResponse<serde_json::Value> =
56 serde_json::from_str(&text)?;
57 let code = parsed.meta.code;
58 if (200..300).contains(&code) {
59 Ok(parsed.data.unwrap_or(serde_json::Value::Null))
60 } else {
61 Err(crate::error::Error::Api {
62 code,
63 message: parsed.meta.error.unwrap_or_else(|| "unknown error".into()),
64 })
65 }
66 }
67
68 #[tracing::instrument(skip(self))]
70 pub async fn get_speed_test(&self, network_id: u64) -> Result<Vec<SpeedTest>> {
71 let url = self.url(&format!("/networks/{network_id}/speedtest"));
72 self.get(&url).await
73 }
74
75 #[tracing::instrument(skip(self))]
77 pub async fn get_guest_network(&self, network_id: u64) -> Result<GuestNetwork> {
78 let url = self.url(&format!("/networks/{network_id}/guestnetwork"));
79 self.get(&url).await
80 }
81
82 #[tracing::instrument(skip(self, update))]
84 pub async fn update_guest_network(
85 &self,
86 network_id: u64,
87 update: &GuestNetworkUpdate,
88 ) -> Result<GuestNetwork> {
89 let url = self.url(&format!("/networks/{network_id}/guestnetwork"));
90 self.put(&url, update).await
91 }
92}