chatwork/v2/rooms/messages/
mod.rs

1mod read;
2mod unread;
3
4crate::derive_service! {
5    pub struct Service {
6        pub(super) inner: crate::Client,
7        pub(super) room_id: i64,
8    }
9}
10
11impl Service {
12    pub async fn list(&self, list: &List) -> crate::Result<Vec<Message>> {
13        self.inner
14            .get(crate::path_and_query!("/rooms/{room_id}/messages", room_id = self.room_id; list))
15            .await
16    }
17
18    pub async fn get(&self, message_id: impl AsRef<str>) -> crate::Result<Message> {
19        self.inner
20            .get(crate::path_and_query!(
21                "/rooms/{room_id}/messages/{message_id}",
22                room_id = self.room_id,
23                message_id = message_id.as_ref()
24            ))
25            .await
26    }
27
28    pub async fn create(&self, create: &Create<'_>) -> crate::Result<MessageId> {
29        self.inner
30            .post(
31                crate::path_and_query!("/rooms/{room_id}/messages", room_id = self.room_id),
32                create,
33            )
34            .await
35    }
36
37    pub async fn update(
38        &self,
39        message_id: impl AsRef<str>,
40        update: &Update<'_>,
41    ) -> crate::Result<MessageId> {
42        self.inner
43            .put(
44                crate::path_and_query!(
45                    "/rooms/{room_id}/messages/{message_id}",
46                    room_id = self.room_id,
47                    message_id = message_id.as_ref()
48                ),
49                Some(update),
50            )
51            .await
52    }
53
54    pub async fn delete(&self, message_id: impl AsRef<str>) -> crate::Result<MessageId> {
55        self.inner
56            .delete(
57                crate::path_and_query!(
58                    "/rooms/{room_id}/messages/{message_id}",
59                    room_id = self.room_id,
60                    message_id = message_id.as_ref()
61                ),
62                Option::<&()>::None,
63            )
64            .await
65    }
66
67    pub fn read(&self) -> read::Service {
68        read::Service { inner: self.inner.clone(), room_id: self.room_id }
69    }
70
71    pub fn unread(&self) -> unread::Service {
72        unread::Service { inner: self.inner.clone(), room_id: self.room_id }
73    }
74}
75
76crate::derive_query_or_form! {
77    pub struct List {
78        #[serde(serialize_with = "crate::serde::opt_bool_to_u8")]
79        pub force: Option<bool>,
80    }
81}
82
83crate::derive_query_or_form! {
84    pub struct Create<'a> {
85        pub body: &'a str,
86        #[serde(serialize_with = "crate::serde::opt_bool_to_u8")]
87        pub self_unread: Option<bool>,
88    }
89}
90
91crate::derive_query_or_form! {
92    pub struct Update<'a> {
93        pub body: &'a str,
94    }
95}
96
97crate::derive_model! {
98    pub struct MessageId {
99        pub message_id: String,
100    }
101}
102
103crate::derive_model! {
104    pub struct Message {
105        pub account: crate::v2::Account,
106        pub body: String,
107        pub message_id: String,
108        pub send_time: i64,
109        pub update_time: i64,
110    }
111}