Skip to main content

Crate rust_mc_status

Crate rust_mc_status 

Source
Expand description

§rust-mc-status

High-performance asynchronous Rust library for querying Minecraft server status — Java Edition and Bedrock Edition.

§Quick start

use rust_mc_status::{ping_java, ping_bedrock, StatusExt};

#[tokio::main]
async fn main() -> Result<(), rust_mc_status::McError> {
    // One-shot facade — no setup required
    let java = ping_java("mc.hypixel.net").await?;
    println!("{} — {} ms", java.motd_clean(), java.latency_ms() as u32);

    let bedrock = ping_bedrock("geo.hivebedrock.network").await?;
    println!("{} [{}]", bedrock.motd_clean(), bedrock.edition());
    Ok(())
}

§Using a client

Build a McClient when you need custom timeouts, caching, or a proxy. McClient::builder() is the only constructor — there is no new().

use rust_mc_status::{McClient, StatusExt};
use std::time::Duration;

#[tokio::main]
async fn main() -> Result<(), rust_mc_status::McError> {
    let client = McClient::builder()
        .timeout(Duration::from_secs(5))
        .max_parallel(20)
        .response_cache(Duration::from_secs(30), 256)
        .build();

    let status = client.java("mc.hypixel.net").await?;
    println!("{}", status.display_players()); // "21000/200000"
    println!("{:.0} ms", status.latency_ms());
    println!("cached: {}", status.is_cached());
    Ok(())
}

§Batch pings

McClient::ping_many pings multiple servers concurrently using a semaphore — slow or timed-out servers never block the rest.

use rust_mc_status::{McClient, ServerEdition, ServerInfo};

#[tokio::main]
async fn main() -> Result<(), rust_mc_status::McError> {
    let client = McClient::builder().max_parallel(10).build();
    let servers = vec![
        ServerInfo { address: "mc.hypixel.net".into(), edition: ServerEdition::Java },
        ServerInfo { address: "geo.hivebedrock.network".into(), edition: ServerEdition::Bedrock },
    ];
    for (server, result) in client.ping_many(&servers).await {
        match result {
            Ok(s)  => println!("{} — {} ms", server.address, s.latency),
            Err(e) => println!("{} — ❌ {e}", server.address),
        }
    }
    Ok(())
}

§Error handling

McError is a two-level hierarchy — match broadly or drill into details:

use rust_mc_status::{McClient, McError, StatusExt};
use rust_mc_status::error::{NetworkError, ProtocolError};

#[tokio::main]
async fn main() {
    let client = McClient::builder().build();
    match client.java("mc.hypixel.net").await {
        Ok(s) => println!("online: {}", s.display_players()),
        Err(McError::Network(NetworkError::Timeout))       => println!("timed out"),
        Err(McError::Network(NetworkError::Dns(msg)))      => println!("DNS: {msg}"),
        Err(McError::Protocol(ProtocolError::InvalidResponse(msg))) => println!("bad packet: {msg}"),
        Err(e) => println!("other: {e}"),
    }
}

§Optional features

FeatureWhat it adds
proxySOCKS5 and HTTP CONNECT proxy support via ProxyConfig
tower[McService] — wrap McClient in Tower middleware (retries, rate-limiting, etc.)
fullBoth proxy and tower
[dependencies]
rust-mc-status = { version = "3", features = ["full"] }

§Crate structure

ModuleContents
(root)McClient, McClientBuilder, ping_java, ping_bedrock
errorMcError and sub-error types
modelsServerStatus, ServerData, JavaStatus, BedrockStatus, etc.
statusJavaServerStatus, BedrockServerStatus, StatusExt trait
proxyProxyConfig (feature = “proxy”)
[service][McService], [McRetryPolicy] (feature = “tower”)
coreInternal DNS resolver, response cache, address parser (not stable API)

Re-exports§

pub use client::McClient;
pub use client::McClientBuilder;
pub use client::ping_java;
pub use client::ping_bedrock;
pub use client::JavaPingBuilder;
pub use client::BedrockPingBuilder;
pub use client::ServerPingBuilder;
pub use error::McError;
pub use error::NetworkError;
pub use error::ProtocolError;
pub use error::ConfigError;
pub use models::CacheStats;
pub use models::PingResult;
pub use models::LegacyData;
pub use models::QueryData;
pub use proxy::ProxyConfig;
pub use proxy::ProxyKind;
pub use status::JavaServerStatus;
pub use status::BedrockServerStatus;
pub use status::StatusExt;
pub use status::strip_formatting;
pub use status::truncate_str;
pub use models::*;

Modules§

client
core
Internal infrastructure modules.
error
Error types for the rust-mc-status library.
models
Data models for Minecraft server status responses.
protocol
Protocol abstraction layer.
proxy
Proxy configuration for routing Minecraft pings through SOCKS5 or HTTP CONNECT proxies.
status
Typed status wrappers and the StatusExt trait.