use serde::{self, Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
pub struct Params {
#[serde(rename = "discussionid")]
pub r#discussionid: Option<i64>,
#[serde(rename = "targetstate")]
pub r#targetstate: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ReturnsGroupUrls {
#[serde(rename = "picture")]
pub r#picture: Option<String>,
#[serde(rename = "userlist")]
pub r#userlist: Option<String>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ReturnsGroup {
#[serde(rename = "name")]
pub r#name: Option<String>,
#[serde(rename = "urls")]
pub r#urls: Option<ReturnsGroupUrls>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ReturnsTimes {
#[serde(rename = "modified")]
pub r#modified: Option<i64>,
#[serde(rename = "start")]
pub r#start: Option<i64>,
#[serde(rename = "end")]
pub r#end: Option<i64>,
#[serde(rename = "locked")]
pub r#locked: Option<i64>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ReturnsUserstate {
#[serde(rename = "subscribed")]
pub r#subscribed: Option<bool>,
#[serde(rename = "favourited")]
pub r#favourited: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ReturnsCapabilities {
#[serde(rename = "subscribe")]
pub r#subscribe: Option<bool>,
#[serde(rename = "move")]
pub r#move: Option<bool>,
#[serde(rename = "pin")]
pub r#pin: Option<bool>,
#[serde(rename = "post")]
pub r#post: Option<bool>,
#[serde(rename = "manage")]
pub r#manage: Option<bool>,
#[serde(rename = "favourite")]
pub r#favourite: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ReturnsUrls {
#[serde(rename = "view")]
pub r#view: Option<String>,
#[serde(rename = "viewlatest")]
pub r#viewlatest: Option<String>,
#[serde(rename = "viewfirstunread")]
pub r#viewfirstunread: Option<String>,
#[serde(rename = "markasread")]
pub r#markasread: Option<String>,
#[serde(rename = "subscribe")]
pub r#subscribe: Option<String>,
#[serde(rename = "pin")]
pub r#pin: Option<String>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ReturnsTimed {
#[serde(rename = "istimed")]
pub r#istimed: Option<bool>,
#[serde(rename = "visible")]
pub r#visible: Option<bool>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct Returns {
#[serde(rename = "id")]
pub r#id: Option<i64>,
#[serde(rename = "forumid")]
pub r#forumid: Option<i64>,
#[serde(rename = "pinned")]
pub r#pinned: Option<bool>,
#[serde(rename = "locked")]
pub r#locked: Option<bool>,
#[serde(rename = "istimelocked")]
pub r#istimelocked: Option<bool>,
#[serde(rename = "name")]
pub r#name: Option<String>,
#[serde(rename = "firstpostid")]
pub r#firstpostid: Option<i64>,
#[serde(rename = "group")]
pub r#group: Option<ReturnsGroup>,
#[serde(rename = "times")]
pub r#times: Option<ReturnsTimes>,
#[serde(rename = "userstate")]
pub r#userstate: Option<ReturnsUserstate>,
#[serde(rename = "capabilities")]
pub r#capabilities: Option<ReturnsCapabilities>,
#[serde(rename = "urls")]
pub r#urls: Option<ReturnsUrls>,
#[serde(rename = "timed")]
pub r#timed: Option<ReturnsTimed>,
}
pub async fn call<'a>(
client: &'a mut moodle_client::MoodleClient,
params: &'a mut Params,
) -> anyhow::Result<Returns> {
let json = client.post("mod_forum_set_pin_state", params).await?;
serde_json::from_value(json).map_err(|e| e.into())
}
pub async fn call_raw<'a>(
client: &'a mut moodle_client::MoodleClient,
params: &'a mut Params,
) -> anyhow::Result<serde_json::Value> {
client.post("mod_forum_set_pin_state", params).await
}