lichess-api 1.0.0

A client library for the Lichess API
Documentation
use crate::model::{PerfType, Title};

use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use std::collections::HashMap;

#[derive(Default, Clone, Debug, Serialize)]
#[skip_serializing_none]
pub struct GetQuery {
    pub since: Option<u64>,
    pub nb: Option<u32>,
}

pub type GetRequest = crate::model::Request<GetQuery>;

impl GetRequest {
    pub fn new(query: GetQuery) -> Self {
        Self::get("/api/timeline", query, None)
    }
}

impl From<GetQuery> for GetRequest {
    fn from(query: GetQuery) -> Self {
        Self::new(query)
    }
}

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Timeline {
    pub entries: Vec<TimelineEntry>,
    pub users: HashMap<String, TimelineUser>,
}

#[skip_serializing_none]
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TimelineUser {
    pub id: String,
    pub name: String,
    pub title: Option<Title>,
    pub flair: Option<String>,
    pub patron: Option<bool>,
    #[serde(rename = "patronColor")]
    pub patron_color: Option<u8>,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(tag = "type")]
#[serde(rename_all = "kebab-case")]
pub enum TimelineEntry {
    Follow { data: FollowData, date: u64 },
    TeamJoin { data: TeamJoinData, date: u64 },
    TeamCreate { data: TeamCreateData, date: u64 },
    ForumPost { data: ForumPostData, date: u64 },
    BlogPost { data: BlogPostData, date: u64 },
    UblogPost { data: UblogPostData, date: u64 },
    TourJoin { data: TourJoinData, date: u64 },
    GameEnd { data: GameEndData, date: u64 },
    SimulCreate { data: SimulData, date: u64 },
    SimulJoin { data: SimulData, date: u64 },
    StudyLike { data: StudyLikeData, date: u64 },
    PlanStart { data: PlanStartData, date: u64 },
    PlanRenew { data: PlanRenewData, date: u64 },
    UblogPostLike { data: UblogPostLikeData, date: u64 },
    StreamStart { data: StreamStartData, date: u64 },
}

#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct FollowData {
    pub u1: String,
    pub u2: String,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TeamJoinData {
    pub user_id: String,
    pub team_id: String,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TeamCreateData {
    pub user_id: String,
    pub team_id: String,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ForumPostData {
    pub user_id: String,
    pub topic_id: String,
    pub topic_name: String,
    pub post_id: String,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct BlogPostData {
    pub id: String,
    pub slug: String,
    pub title: String,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UblogPostData {
    pub user_id: String,
    pub id: String,
    pub slug: String,
    pub title: String,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct TourJoinData {
    pub user_id: String,
    pub tour_id: String,
    pub tour_name: String,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GameEndData {
    pub full_id: String,
    pub opponent: String,
    pub win: bool,
    pub perf: PerfType,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct SimulData {
    pub user_id: String,
    pub simul_id: String,
    pub simul_name: String,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct StudyLikeData {
    pub user_id: String,
    pub study_id: String,
    pub study_name: String,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PlanStartData {
    pub user_id: String,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct PlanRenewData {
    pub user_id: String,
    pub months: u32,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct UblogPostLikeData {
    pub user_id: String,
    pub id: String,
    pub title: String,
}

#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct StreamStartData {
    pub id: String,
    pub title: String,
}