misskey_api/endpoint/notes/
search.rs1use crate::model::{id::Id, note::Note, user::User};
2
3use serde::Serialize;
4use typed_builder::TypedBuilder;
5
6#[derive(Serialize, Debug, Clone, TypedBuilder)]
7#[serde(rename_all = "camelCase")]
8#[builder(doc)]
9pub struct Request {
10 #[builder(setter(into))]
11 pub query: String,
12 #[builder(default, setter(strip_option))]
13 pub user_id: Option<Id<User>>,
14 #[builder(default, setter(strip_option, into))]
15 pub host: Option<String>,
16 #[serde(skip_serializing_if = "Option::is_none")]
18 #[builder(default, setter(strip_option))]
19 pub limit: Option<u8>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 #[builder(default, setter(strip_option))]
22 pub since_id: Option<Id<Note>>,
23 #[serde(skip_serializing_if = "Option::is_none")]
24 #[builder(default, setter(strip_option))]
25 pub until_id: Option<Id<Note>>,
26}
27
28impl misskey_core::Request for Request {
29 type Response = Vec<Note>;
30 const ENDPOINT: &'static str = "notes/search";
31}
32
33impl_pagination!(Request, Note);
34
35#[cfg(test)]
36mod tests {
37 use super::Request;
38 use crate::test::{ClientExt, TestClient};
39
40 #[tokio::test]
41 async fn request_with_query() {
42 let client = TestClient::new();
43 client
44 .test(Request {
45 query: "query".to_string(),
46 user_id: None,
47 host: None,
48 limit: None,
49 since_id: None,
50 until_id: None,
51 })
52 .await;
53 }
54
55 #[tokio::test]
56 async fn request_with_user_id() {
57 let client = TestClient::new();
58 let user = client.admin.me().await;
59 client
60 .test(Request {
61 query: "query".to_string(),
62 user_id: Some(user.id),
63 host: None,
64 limit: None,
65 since_id: None,
66 until_id: None,
67 })
68 .await;
69 }
70
71 #[tokio::test]
72 async fn request_with_host() {
73 let client = TestClient::new();
74 client
75 .test(Request {
76 query: "query".to_string(),
77 user_id: None,
78 host: Some("dummy".to_string()),
80 limit: None,
81 since_id: None,
82 until_id: None,
83 })
84 .await;
85 }
86
87 #[tokio::test]
88 async fn request_with_limit() {
89 let client = TestClient::new();
90 client
91 .test(Request {
92 query: "query".to_string(),
93 user_id: None,
94 host: None,
95 limit: Some(100),
96 since_id: None,
97 until_id: None,
98 })
99 .await;
100 }
101
102 #[tokio::test]
103 async fn request_paginate() {
104 let client = TestClient::new();
105 let note = client.create_note(Some("test"), None, None).await;
106
107 client
108 .test(Request {
109 query: "test".to_string(),
110 user_id: None,
111 host: None,
112 limit: None,
113 since_id: Some(note.id.clone()),
114 until_id: Some(note.id.clone()),
115 })
116 .await;
117 }
118}