lichess_api/model/external_engine/
analyse.rs1use 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}