Skip to main content

lichess_api/model/puzzles/
batch.rs

1use crate::model::puzzles::{PuzzleAndGame, next::Difficulty};
2use crate::model::{Body, Request};
3use serde::{Deserialize, Serialize};
4use serde_with::skip_serializing_none;
5
6#[skip_serializing_none]
7#[derive(Default, Clone, Debug, Serialize)]
8pub struct GetQuery {
9    pub difficulty: Option<Difficulty>,
10    pub nb: Option<u32>,
11    pub color: Option<Color>,
12}
13
14#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
15#[serde(rename_all = "lowercase")]
16pub enum Color {
17    White,
18    Black,
19}
20
21pub type GetRequest = Request<GetQuery>;
22
23impl GetRequest {
24    pub fn new(angle: &str, query: GetQuery) -> Self {
25        let path = format!("/api/puzzle/batch/{angle}");
26        Self::get(path, query, None)
27    }
28}
29
30#[derive(Clone, Debug, Deserialize, Serialize)]
31pub struct Select {
32    pub puzzles: Vec<PuzzleAndGame>,
33    pub glicko: Glicko,
34}
35
36#[skip_serializing_none]
37#[derive(Clone, Debug, Deserialize, Serialize)]
38pub struct Glicko {
39    pub rating: f64,
40    pub deviation: f64,
41    pub provisional: Option<bool>,
42}
43
44#[skip_serializing_none]
45#[derive(Default, Clone, Debug, Serialize)]
46pub struct PostQuery {
47    pub nb: Option<u32>,
48}
49
50#[derive(Clone, Debug, Serialize)]
51pub struct SolveRequest {
52    pub solutions: Vec<Solution>,
53}
54
55#[derive(Clone, Debug, Serialize)]
56pub struct Solution {
57    pub id: String,
58    pub win: bool,
59    pub rated: bool,
60}
61
62pub type PostRequest = Request<PostQuery, SolveRequest>;
63
64impl PostRequest {
65    pub fn new(angle: &str, query: PostQuery, solutions: SolveRequest) -> Self {
66        let path = format!("/api/puzzle/batch/{angle}");
67        Self::post(path, query, Body::Json(solutions), None)
68    }
69}
70
71#[derive(Clone, Debug, Deserialize, Serialize)]
72pub struct SolveResponse {
73    pub puzzles: Vec<PuzzleAndGame>,
74    pub glicko: Glicko,
75    pub rounds: Vec<Round>,
76}
77
78#[derive(Clone, Debug, Deserialize, Serialize)]
79#[serde(rename_all = "camelCase")]
80pub struct Round {
81    pub id: String,
82    pub win: bool,
83    pub rating_diff: i32,
84}