misskey_api/endpoint/messaging/messages/
create.rs1use crate::model::{
2 drive::DriveFile, id::Id, messaging::MessagingMessage, user::User, user_group::UserGroup,
3};
4
5use serde::Serialize;
6use typed_builder::TypedBuilder;
7
8#[derive(Serialize, Debug, Clone, TypedBuilder)]
9#[serde(rename_all = "camelCase")]
10#[builder(doc)]
11pub struct Request {
12 #[serde(skip_serializing_if = "Option::is_none")]
13 #[builder(default, setter(strip_option, into))]
14 pub text: Option<String>,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 #[builder(default, setter(strip_option))]
17 pub user_id: Option<Id<User>>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 #[builder(default, setter(strip_option))]
20 pub group_id: Option<Id<UserGroup>>,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 #[builder(default, setter(strip_option))]
23 pub file_id: Option<Id<DriveFile>>,
24}
25
26impl misskey_core::Request for Request {
27 type Response = MessagingMessage;
28 const ENDPOINT: &'static str = "messaging/messages/create";
29}
30
31#[cfg(test)]
32mod tests {
33 use super::Request;
34 use crate::test::{ClientExt, HttpClientExt, TestClient};
35
36 #[tokio::test]
37 async fn request_with_text() {
38 let client = TestClient::new();
39 let admin = client.admin.me().await;
40 client
41 .user
42 .test(Request {
43 text: Some("hi".to_string()),
44 user_id: Some(admin.id),
45 group_id: None,
46 file_id: None,
47 })
48 .await;
49 }
50
51 #[tokio::test]
52 async fn request_with_group() {
53 let client = TestClient::new();
54 let group = client
55 .test(crate::endpoint::users::groups::create::Request {
56 name: "test".to_string(),
57 })
58 .await;
59 client
60 .test(Request {
61 text: Some("hi".to_string()),
62 user_id: None,
63 group_id: Some(group.id),
64 file_id: None,
65 })
66 .await;
67 }
68
69 #[tokio::test]
70 async fn request_with_file() {
71 let client = TestClient::new();
72 let admin = client.admin.me().await;
73 let file = client.create_text_file("test.txt", "hello").await;
74
75 client
76 .user
77 .test(Request {
78 text: Some("hi".to_string()),
79 user_id: Some(admin.id),
80 group_id: None,
81 file_id: Some(file.id),
82 })
83 .await;
84 }
85}