misskey_api/endpoint/messaging/messages/
create.rs

1use 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}