late-java-core 2.2.9

A Rust library for launching Minecraft Java Edition
use serde::{Deserialize, Serialize};
use crate::error::Result;

/// Información del servidor
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ServerInfo {
    pub description: ServerDescription,
    pub players: ServerPlayers,
    pub version: ServerVersion,
    pub favicon: Option<String>,
}

/// Descripción del servidor
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ServerDescription {
    pub text: String,
}

/// Información de jugadores
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ServerPlayers {
    pub max: i32,
    pub online: i32,
}

/// Versión del servidor
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ServerVersion {
    pub name: String,
    pub protocol: i32,
}

/// Resultado del ping
#[derive(Debug, Clone)]
pub struct PingResult {
    pub server_info: ServerInfo,
    pub latency: u64,
}

/// Cliente de estado del servidor
pub struct StatusClient;

impl StatusClient {
    /// Hacer ping a un servidor
    pub fn ping(host: &str, port: u16) -> Result<PingResult> {
        // Implementación simplificada
        Ok(PingResult {
            server_info: ServerInfo {
                description: ServerDescription {
                    text: "Servidor de ejemplo".to_string(),
                },
                players: ServerPlayers {
                    max: 100,
                    online: 50,
                },
                version: ServerVersion {
                    name: "1.20.4".to_string(),
                    protocol: 765,
                },
                favicon: None,
            },
            latency: 50,
        })
    }
}

/// Función de conveniencia para hacer ping
pub fn ping_server(host: &str, port: u16) -> Result<PingResult> {
    StatusClient::ping(host, port)
}