lichess_api/model/external_engine/
analyse.rs

1use crate::model::{Body, Domain, Request};
2use serde::{Deserialize, Serialize};
3
4#[derive(Default, Clone, Debug, Serialize)]
5#[serde(rename_all = "camelCase")]
6pub struct PostQuery;
7
8pub type PostRequest = Request<PostQuery, AnalysisRequest>;
9
10impl PostRequest {
11    pub fn new(id: &str, analysis_request: AnalysisRequest) -> Self {
12        Self {
13            domain: Domain::Engine,
14            method: http::Method::POST,
15            path: format!("/api/external-engine/{}/analyse", id),
16            query: Default::default(),
17            body: Body::Json(analysis_request),
18        }
19    }
20}
21
22#[derive(Clone, Debug, Serialize)]
23#[serde(rename_all = "camelCase")]
24pub struct AnalysisRequest {
25    pub client_secret: String,
26    pub work: ExternalEngineWork,
27}
28
29#[derive(Clone, Debug, Serialize)]
30#[serde(rename_all = "camelCase")]
31pub struct ExternalEngineWork {
32    pub session_id: String,
33    pub threads: u32,
34    pub hash: u32,
35    pub infinite: bool,
36    pub multi_pv: u8,
37    pub variant: String,
38    pub initial_fen: String,
39    pub moves: Vec<String>,
40}
41
42#[derive(Clone, Debug, Deserialize)]
43#[serde(rename_all = "camelCase")]
44pub struct AnalysisResponse {
45    pub time: u64,
46    pub depth: u8,
47    pub nodes: u64,
48    pub pvs: Vec<PV>,
49}
50
51#[derive(Clone, Debug, Deserialize)]
52#[serde(rename_all = "camelCase")]
53pub struct PV {
54    pub depth: u8,
55    pub cp: i32,
56    pub mate: i32,
57    pub moves: Vec<String>,
58}