#![allow(clippy::missing_errors_doc)]
use std::borrow::Borrow;
use minreq::{Method, Request, Response};
const API_BASE: &str = "https://api.neos.com/api/";
mod error;
mod inner;
pub use error::*;
mod any;
mod auth;
mod noauth;
mod req_models;
pub use any::*;
pub use auth::*;
pub use noauth::*;
pub use req_models::*;
pub trait Neos {
#[doc(hidden)]
fn api_request(
&self,
method: Method,
url: &str,
build: &mut dyn FnMut(Request) -> Result<Request, minreq::Error>,
) -> Result<Response, RequestError>;
fn ping(&self) -> Result<(), RequestError> {
self.api_request(Method::Get, "testing/ping", &mut Ok)?;
Ok(())
}
fn online_user_count(&self) -> Result<u32, RequestError> {
let resp = self.api_request(Method::Get, "stats/onlineUsers", &mut Ok)?;
match resp.json::<&str>()?.parse::<u32>() {
Ok(num) => Ok(num),
Err(err) => Err(RequestError::Deserialization(err.to_string())),
}
}
fn online_instance_count(&self) -> Result<u32, RequestError> {
let resp = self.api_request(Method::Get, "stats/onlineInstances", &mut Ok)?;
match resp.json::<&str>()?.parse::<u32>() {
Ok(num) => Ok(num),
Err(err) => Err(RequestError::Deserialization(err.to_string())),
}
}
fn get_sessions(&self) -> Result<Vec<crate::SessionInfo>, RequestError> {
let resp = self.api_request(Method::Get, "sessions", &mut Ok)?;
Ok(resp.json()?)
}
fn get_user(
&self,
user: impl Into<UserIdOrUsername>,
) -> Result<crate::User, RequestError> {
let user = user.into();
let resp = self.api_request(
Method::Get,
&("users/".to_owned()
+ user.as_ref() + "?byUsername="
+ &(!user.is_id()).to_string()),
&mut Ok,
)?;
Ok(resp.json()?)
}
fn search_users(
&self,
name: impl Borrow<str>,
) -> Result<Vec<crate::User>, RequestError> {
let resp = self.api_request(
Method::Get,
&("users?name=".to_owned() + name.borrow()),
&mut Ok,
)?;
Ok(resp.json()?)
}
fn get_user_status(
&self,
user_id: impl Borrow<crate::id::User>,
) -> Result<crate::UserStatus, RequestError> {
let resp = self.api_request(
Method::Get,
&("users/".to_owned() + user_id.borrow().as_ref() + "/status"),
&mut Ok,
)?;
Ok(resp.json()?)
}
fn get_session(
&self,
session_id: impl Borrow<crate::id::Session>,
) -> Result<crate::SessionInfo, RequestError> {
let resp = self.api_request(
Method::Get,
&("sessions/".to_owned() + session_id.borrow().as_ref()),
&mut Ok,
)?;
Ok(resp.json()?)
}
fn get_group(
&self,
group_id: impl Borrow<crate::id::Group>,
) -> Result<crate::Group, RequestError> {
let resp = self.api_request(
Method::Get,
&("groups/".to_owned() + group_id.borrow().as_ref()),
&mut Ok,
)?;
Ok(resp.json()?)
}
}