chatwork/v2/rooms/messages/
mod.rs1mod 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}