moodle_api/core/message/
get_conversation.rs

1use serde::{self, Deserialize, Serialize};
2
3#[derive(Serialize, Deserialize, Debug)]
4pub struct Params {
5    /// The id of the user who we are viewing conversations for
6    #[serde(rename = "userid")]
7    pub r#userid: Option<i64>,
8    /// The id of the conversation to fetch
9    #[serde(rename = "conversationid")]
10    pub r#conversationid: Option<i64>,
11    /// Include contact requests in the members
12    #[serde(rename = "includecontactrequests")]
13    pub r#includecontactrequests: Option<bool>,
14    /// Include privacy info in the members
15    #[serde(rename = "includeprivacyinfo")]
16    pub r#includeprivacyinfo: Option<bool>,
17    /// Limit for number of members
18    #[serde(rename = "memberlimit")]
19    pub r#memberlimit: Option<i64>,
20    /// Offset for member list
21    #[serde(rename = "memberoffset")]
22    pub r#memberoffset: Option<i64>,
23    /// Limit for number of messages
24    #[serde(rename = "messagelimit")]
25    pub r#messagelimit: Option<i64>,
26    /// Offset for messages list
27    #[serde(rename = "messageoffset")]
28    pub r#messageoffset: Option<i64>,
29    /// Order messages by newest first
30    #[serde(rename = "newestmessagesfirst")]
31    pub r#newestmessagesfirst: Option<bool>,
32}
33
34#[derive(Serialize, Deserialize, Debug)]
35pub struct ReturnsMembersItemContactrequestsItem {
36    /// The id of the contact request
37    #[serde(rename = "id")]
38    pub r#id: Option<i64>,
39    /// The id of the user who created the contact request
40    #[serde(rename = "userid")]
41    pub r#userid: Option<i64>,
42    /// The id of the user confirming the request
43    #[serde(rename = "requesteduserid")]
44    pub r#requesteduserid: Option<i64>,
45    /// The timecreated timestamp for the contact request
46    #[serde(rename = "timecreated")]
47    pub r#timecreated: Option<i64>,
48}
49
50/// The contact requests
51pub type r#ReturnsMembersItemContactrequests = Vec<ReturnsMembersItemContactrequestsItem>;
52
53/// information about conversation
54#[derive(Serialize, Deserialize, Debug)]
55pub struct ReturnsMembersItemConversationsItem {
56    /// Conversations id
57    #[serde(rename = "id")]
58    pub r#id: Option<i64>,
59    /// Conversation type: private or public
60    #[serde(rename = "type")]
61    pub r#type: Option<i64>,
62    /// Multilang compatible conversation name2
63    #[serde(rename = "name")]
64    pub r#name: Option<String>,
65    /// The timecreated timestamp for the conversation
66    #[serde(rename = "timecreated")]
67    pub r#timecreated: Option<i64>,
68}
69
70/// Conversations between users
71pub type r#ReturnsMembersItemConversations = Vec<ReturnsMembersItemConversationsItem>;
72
73#[derive(Serialize, Deserialize, Debug)]
74pub struct ReturnsMembersItem {
75    /// The user id
76    #[serde(rename = "id")]
77    pub r#id: Option<i64>,
78    /// The user's name
79    #[serde(rename = "fullname")]
80    pub r#fullname: Option<String>,
81    /// The link to the user's profile page
82    #[serde(rename = "profileurl")]
83    pub r#profileurl: Option<String>,
84    /// User picture URL
85    #[serde(rename = "profileimageurl")]
86    pub r#profileimageurl: Option<String>,
87    /// Small user picture URL
88    #[serde(rename = "profileimageurlsmall")]
89    pub r#profileimageurlsmall: Option<String>,
90    /// The user's online status
91    #[serde(rename = "isonline")]
92    pub r#isonline: Option<bool>,
93    /// Show the user's online status?
94    #[serde(rename = "showonlinestatus")]
95    pub r#showonlinestatus: Option<bool>,
96    /// If the user has been blocked
97    #[serde(rename = "isblocked")]
98    pub r#isblocked: Option<bool>,
99    /// Is the user a contact?
100    #[serde(rename = "iscontact")]
101    pub r#iscontact: Option<bool>,
102    /// Is the user deleted?
103    #[serde(rename = "isdeleted")]
104    pub r#isdeleted: Option<bool>,
105    /// If the user can still message even if they get blocked
106    #[serde(rename = "canmessageevenifblocked")]
107    pub r#canmessageevenifblocked: Option<bool>,
108    /// If the user can be messaged
109    #[serde(rename = "canmessage")]
110    pub r#canmessage: Option<bool>,
111    /// If the user requires to be contacts
112    #[serde(rename = "requirescontact")]
113    pub r#requirescontact: Option<bool>,
114    /// The contact requests
115    #[serde(rename = "contactrequests")]
116    pub r#contactrequests: Option<r#ReturnsMembersItemContactrequests>,
117    /// Conversations between users
118    #[serde(rename = "conversations")]
119    pub r#conversations: Option<r#ReturnsMembersItemConversations>,
120}
121
122pub type r#ReturnsMembers = Vec<ReturnsMembersItem>;
123
124#[derive(Serialize, Deserialize, Debug)]
125pub struct ReturnsMessagesItem {
126    /// The id of the message
127    #[serde(rename = "id")]
128    pub r#id: Option<i64>,
129    /// The id of the user who sent the message
130    #[serde(rename = "useridfrom")]
131    pub r#useridfrom: Option<i64>,
132    /// The text of the message
133    #[serde(rename = "text")]
134    pub r#text: Option<String>,
135    /// The timecreated timestamp for the message
136    #[serde(rename = "timecreated")]
137    pub r#timecreated: Option<i64>,
138}
139
140pub type r#ReturnsMessages = Vec<ReturnsMessagesItem>;
141
142#[derive(Serialize, Deserialize, Debug)]
143pub struct Returns {
144    /// The conversation id
145    #[serde(rename = "id")]
146    pub r#id: Option<i64>,
147    /// The conversation name, if set
148    #[serde(rename = "name")]
149    pub r#name: Option<String>,
150    /// A subtitle for the conversation name, if set
151    #[serde(rename = "subname")]
152    pub r#subname: Option<String>,
153    /// A link to the conversation picture, if set
154    #[serde(rename = "imageurl")]
155    pub r#imageurl: Option<String>,
156    /// The type of the conversation (1=individual,2=group,3=self)
157    #[serde(rename = "type")]
158    pub r#type: Option<i64>,
159    /// Total number of conversation members
160    #[serde(rename = "membercount")]
161    pub r#membercount: Option<i64>,
162    /// If the user muted this conversation
163    #[serde(rename = "ismuted")]
164    pub r#ismuted: Option<bool>,
165    /// If the user marked this conversation as a favourite
166    #[serde(rename = "isfavourite")]
167    pub r#isfavourite: Option<bool>,
168    /// If the user has read all messages in the conversation
169    #[serde(rename = "isread")]
170    pub r#isread: Option<bool>,
171    /// The number of unread messages in this conversation
172    #[serde(rename = "unreadcount")]
173    pub r#unreadcount: Option<i64>,
174    #[serde(rename = "members")]
175    pub r#members: Option<r#ReturnsMembers>,
176    #[serde(rename = "messages")]
177    pub r#messages: Option<r#ReturnsMessages>,
178    /// If the user can delete messages in the conversation for all users
179    #[serde(rename = "candeletemessagesforallusers")]
180    pub r#candeletemessagesforallusers: Option<bool>,
181}
182
183pub async fn call<'a>(
184    client: &'a mut moodle_client::MoodleClient,
185    params: &'a mut Params,
186) -> anyhow::Result<Returns> {
187    let json = client.post("core_message_get_conversation", params).await?;
188
189    serde_json::from_value(json).map_err(|e| e.into())
190}
191
192pub async fn call_raw<'a>(
193    client: &'a mut moodle_client::MoodleClient,
194    params: &'a mut Params,
195) -> anyhow::Result<serde_json::Value> {
196    client.post("core_message_get_conversation", params).await
197}