lichess-api 1.0.0

A client library for the Lichess API
Documentation
pub mod channels;
pub mod games;
pub mod stream;

use crate::model::{Color, LightUser};
use serde::{Deserialize, Serialize};

#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Champion {
    pub user: LightUser,
    pub rating: u32,
    pub game_id: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub color: Option<Color>,
}

#[derive(Clone, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Channels {
    bot: Champion,
    blitz: Champion,
    racing_kings: Champion,
    ultra_bullet: Champion,
    bullet: Champion,
    classical: Champion,
    three_check: Champion,
    antichess: Champion,
    computer: Champion,
    horde: Champion,
    rapid: Champion,
    atomic: Champion,
    crazyhouse: Champion,
    chess960: Champion,
    king_of_the_hill: Champion,
    best: Champion,
}

#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum ChannelName {
    Bot,
    Blitz,
    RacingKings,
    UltraBullet,
    Bullet,
    Classical,
    ThreeCheck,
    Antichess,
    Computer,
    Horde,
    Rapid,
    Atomic,
    Crazyhouse,
    Chess960,
    KingOfTheHill,
    Best,
}

impl ChannelName {
    pub const fn as_str(self) -> &'static str {
        match self {
            ChannelName::Bot => "bot",
            ChannelName::Blitz => "blitz",
            ChannelName::RacingKings => "racingKings",
            ChannelName::UltraBullet => "ultraBullet",
            ChannelName::Bullet => "bullet",
            ChannelName::Classical => "classical",
            ChannelName::ThreeCheck => "threeCheck",
            ChannelName::Antichess => "antichess",
            ChannelName::Computer => "computer",
            ChannelName::Horde => "horde",
            ChannelName::Rapid => "rapid",
            ChannelName::Atomic => "atomic",
            ChannelName::Crazyhouse => "crazyhouse",
            ChannelName::Chess960 => "chess960",
            ChannelName::KingOfTheHill => "kingOfTheHill",
            ChannelName::Best => "best",
        }
    }
}

impl std::fmt::Display for ChannelName {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        f.write_str(self.as_str())
    }
}