lichess_api/model/puzzles/
batch.rs1use 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}