moodle_api 0.1.0

Moodle Webservice Client in Rust.
Documentation
use serde::{self, Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug)]
pub struct ParamsOptionsItem {
    /// The backup option name: "activities" (int) Include course activites (default to 1 that is equal to yes), "blocks" (int) Include course blocks (default to 1 that is equal to yes), "filters" (int) Include course filters  (default to 1 that is equal to yes), "users" (int) Include users (default to 0 that is equal to no), "enrolments" (int) Include enrolment methods (default to 1 - restore only with users), "role_assignments" (int) Include role assignments  (default to 0 that is equal to no), "comments" (int) Include user comments  (default to 0 that is equal to no), "userscompletion" (int) Include user course completion information  (default to 0 that is equal to no), "logs" (int) Include course logs  (default to 0 that is equal to no), "grade_histories" (int) Include histories  (default to 0 that is equal to no)
    #[serde(rename = "name")]
    pub r#name: Option<String>,
    /// the value for the option 1 (yes) or 0 (no)
    #[serde(rename = "value")]
    pub r#value: Option<String>,
}

/// Course duplication options
pub type r#ParamsOptions = Vec<ParamsOptionsItem>;

#[derive(Serialize, Deserialize, Debug)]
pub struct Params {
    /// course to duplicate id
    #[serde(rename = "courseid")]
    pub r#courseid: Option<i64>,
    /// duplicated course full name
    #[serde(rename = "fullname")]
    pub r#fullname: Option<String>,
    /// duplicated course short name
    #[serde(rename = "shortname")]
    pub r#shortname: Option<String>,
    /// duplicated course category parent
    #[serde(rename = "categoryid")]
    pub r#categoryid: Option<i64>,
    /// duplicated course visible, default to yes
    #[serde(rename = "visible")]
    pub r#visible: Option<i64>,
    /// Course duplication options
    #[serde(rename = "options")]
    pub r#options: Option<r#ParamsOptions>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct Returns {
    /// course id
    #[serde(rename = "id")]
    pub r#id: Option<i64>,
    /// short name
    #[serde(rename = "shortname")]
    pub r#shortname: Option<String>,
}

pub async fn call<'a>(
    client: &'a mut moodle_client::MoodleClient,
    params: &'a mut Params,
) -> anyhow::Result<Returns> {
    let json = client.post("core_course_duplicate_course", 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("core_course_duplicate_course", params).await
}