Skip to main content

lichess_api/model/studies/
create.rs

1use crate::model::{Body, Request};
2use serde::{Deserialize, Serialize};
3use serde_with::skip_serializing_none;
4
5#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize)]
6#[serde(rename_all = "lowercase")]
7pub enum Visibility {
8    Public,
9    Unlisted,
10    Private,
11}
12
13#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize)]
14#[serde(rename_all = "lowercase")]
15pub enum StudyUserSelection {
16    Nobody,
17    Owner,
18    Contributor,
19    Member,
20    Everyone,
21}
22
23#[skip_serializing_none]
24#[derive(Clone, Debug, Serialize)]
25pub struct CreateStudyForm {
26    pub name: String,
27    pub visibility: Visibility,
28    pub flair: Option<String>,
29    pub computer: StudyUserSelection,
30    pub explorer: StudyUserSelection,
31    pub cloneable: StudyUserSelection,
32    pub shareable: StudyUserSelection,
33    pub chat: StudyUserSelection,
34    pub sticky: Option<bool>,
35    pub description: Option<bool>,
36}
37
38#[derive(Default, Clone, Debug, Deserialize, Serialize)]
39pub struct CreateStudyResponse {
40    pub id: String,
41}
42
43#[derive(Default, Clone, Debug, Serialize)]
44pub struct PostQuery;
45
46pub type PostRequest = Request<PostQuery, CreateStudyForm>;
47
48impl PostRequest {
49    pub fn new(form: CreateStudyForm) -> Self {
50        Self::post("/api/study", None, Body::Form(form), None)
51    }
52}