mod models;
use crate::{
api::wrapper::{List, Single},
error::Error,
AsyncRobot,
};
use hyper::Uri;
use serde::Serialize;
pub use models::*;
use super::{wrapper::Empty, UnauthenticatedRequest};
fn list_servers() -> UnauthenticatedRequest<List<Server>> {
UnauthenticatedRequest::new(Uri::from_static("https://robot-ws.your-server.de/server"))
}
fn get_server(server_number: ServerId) -> UnauthenticatedRequest<Single<Server>> {
UnauthenticatedRequest::from(&format!(
"https://robot-ws.your-server.de/server/{server_number}"
))
}
fn rename_server(
server_number: ServerId,
name: &str,
) -> Result<UnauthenticatedRequest<Single<Server>>, serde_html_form::ser::Error> {
#[derive(Serialize)]
struct RenameServerRequest<'a> {
pub server_name: &'a str,
}
UnauthenticatedRequest::from(&format!(
"https://robot-ws.your-server.de/server/{server_number}"
))
.with_method("POST")
.with_body(RenameServerRequest { server_name: name })
}
fn get_server_cancellation(
server_number: ServerId,
) -> UnauthenticatedRequest<Single<Cancellation>> {
UnauthenticatedRequest::from(&format!(
"https://robot-ws.your-server.de/server/{server_number}/cancellation"
))
}
fn cancel_server(
server_number: ServerId,
cancellation: Cancel,
) -> Result<UnauthenticatedRequest<Single<Cancelled>>, serde_html_form::ser::Error> {
let cancellation: InternalCancel = cancellation.into();
UnauthenticatedRequest::from(&format!(
"https://robot-ws.your-server.de/server/{server_number}/cancellation"
))
.with_method("POST")
.with_body(cancellation)
}
fn withdraw_server_cancellation(server_number: ServerId) -> UnauthenticatedRequest<Empty> {
UnauthenticatedRequest::from(&format!(
"https://robot-ws.your-server.de/server/{server_number}/cancellation"
))
.with_method("DELETE")
}
impl AsyncRobot {
pub async fn list_servers(&self) -> Result<Vec<Server>, Error> {
Ok(self.go(list_servers()).await?.0)
}
pub async fn get_server(&self, server_number: ServerId) -> Result<Server, Error> {
Ok(self.go(get_server(server_number)).await?.0)
}
pub async fn rename_server(
&self,
server_number: ServerId,
name: &str,
) -> Result<Server, Error> {
Ok(self.go(rename_server(server_number, name)?).await?.0)
}
pub async fn get_server_cancellation(
&self,
server_number: ServerId,
) -> Result<Cancellation, Error> {
Ok(self.go(get_server_cancellation(server_number)).await?.0)
}
pub async fn cancel_server(
&self,
server_number: ServerId,
cancellation: Cancel,
) -> Result<Cancelled, Error> {
Ok(self
.go(cancel_server(server_number, cancellation)?)
.await?
.0)
}
pub async fn withdraw_server_cancellation(&self, server_number: ServerId) -> Result<(), Error> {
self.go(withdraw_server_cancellation(server_number))
.await?
.throw_away();
Ok(())
}
}