minehut 1.0.1

Simple Rust wrapper for the Minehut API
Documentation
use crate::request;
use crate::models::{
    ServerInfo,
    ServerList,
    Server, 
    ServerListData
};

pub use super::icons;

/// Gets all online servers on Minehut asynchronously.
/// 
/// # Example
/// 
/// ```
/// #[tokio::main]
/// async fn main() {
///     // get all servers and print their player count
///     minehut::servers::all().await.into_iter().for_each(|s| {
///         println!("{} players on {}", s.player_data.player_count, s.name);
///     });
/// }
/// ```
pub async fn all() -> Vec<ServerListData> {
    request::get_data::<ServerList>("/servers").await.servers
}

/// Gets a server from the specified name asynchronously.
/// 
/// # Arguments
/// 
/// * `name` - Name of the server
/// 
/// # Example
/// 
/// ```
/// async fn wife() {
///     // get server named "Wife"
///     let server = minehut::servers::server_from_name("Wife").await;
///     
///     // server might not exist, so we do a check
///     match server {
///         Ok(s) => println!("{}", s.player_count),
///         Err(_) => println!("Could not find server named Wife")
///     }
/// }
/// ```
/// 
/// # Errors
/// 
/// `servers::server_from_name(&str)` returns an error if the server name 
/// passed as a parameter does not link to any servers.
pub async fn server_from_name(name: &str) -> Result<Server, reqwest::Error> {
    let info = request::get_data_res::<ServerInfo>(
        &format!("/server/{name}?byName=true")
    ).await?;

    Ok(info.server)
}  

/// Gets a server from the specified server ID.
/// 
/// # Arguments
/// 
/// * `id` - ID of the server
/// 
/// # Example
/// 
/// ```
/// #[tokio::main]
/// async fn main() {
///     // getting a server from an ID
///     let server = minehut::servers::server_from_id("93nmIi2meopOs3").await;
/// 
///     // server may not exist
///     match server {
///         Ok(s) => println!("{}", s.player_count),
///         Err(_) => println!("AAAAA!!")
///     }
/// }
/// ```
/// 
/// # Errors
/// 
/// `servers::server_from_id(&str)` returns an error if the server id passed
/// does not correlate to any servers.
pub async fn server_from_id(id: &str) -> Result<Server, reqwest::Error> {
    let info = request::get_data_res::<ServerInfo>(
        &format!("/server/{id}")
    ).await?;

    Ok(info.server)
}