chatwork 0.1.0

Chatwork API client.
Documentation
mod status;

crate::derive_service! {
    pub struct Service {
        pub(super) inner: crate::Client,
        pub(super) room_id: i64,
    }
}

impl Service {
    pub async fn list(&self, list: &List) -> crate::Result<Vec<Task>> {
        self.inner
            .get(crate::path_and_query!("/rooms/{room_id}/tasks", room_id = self.room_id; list))
            .await
    }

    pub async fn get(&self, task_id: i64) -> crate::Result<Task> {
        self.inner
            .get(crate::path_and_query!(
                "/rooms/{room_id}/tasks/{task_id}",
                room_id = self.room_id,
                task_id = task_id
            ))
            .await
    }

    pub async fn create(&self, create: &Create<'_>) -> crate::Result<TaskIds> {
        self.inner
            .post(crate::path_and_query!("/rooms/{room_id}/tasks", room_id = self.room_id), create)
            .await
    }

    pub fn status(&self, task_id: i64) -> status::Service {
        status::Service { inner: self.inner.clone(), room_id: self.room_id, task_id }
    }
}

crate::derive_query_or_form! {
    pub struct List {
        pub account_id: Option<i64>,
        pub assigned_by_account_id: Option<i64>,
        pub status: Option<crate::v2::TaskStatus>,
    }
}

crate::derive_query_or_form! {
    pub struct Create<'a> {
        pub body: &'a str,
        pub limit: Option<i64>,
        pub limit_type: Option<crate::v2::TaskLimit>,
        pub to_ids: crate::v2::List<'a, i64>,
    }
}

crate::derive_model! {
    pub struct Task {
        pub account: crate::v2::Account,
        pub assigned_by_account: crate::v2::Account,
        pub body: String,
        pub limit_time: i64,
        pub limit_type: crate::v2::TaskLimit,
        pub message_id: String,
        pub status: crate::v2::TaskStatus,
        pub task_id: i64,
    }
}

crate::derive_model! {
    pub struct TaskIds {
        pub task_ids: Vec<i64>,
    }
}