misskey_api/endpoint/
notes.rs1use crate::model::{id::Id, note::Note};
2
3use serde::Serialize;
4use typed_builder::TypedBuilder;
5
6pub mod children;
7pub mod conversation;
8pub mod create;
9pub mod delete;
10pub mod favorites;
11pub mod featured;
12pub mod global_timeline;
13pub mod hybrid_timeline;
14pub mod local_timeline;
15pub mod mentions;
16pub mod polls;
17pub mod reactions;
18pub mod renotes;
19pub mod replies;
20pub mod search;
21pub mod search_by_tag;
22pub mod show;
23pub mod state;
24pub mod timeline;
25pub mod unrenote;
26pub mod user_list_timeline;
27pub mod watching;
28
29#[cfg(feature = "12-58-0")]
30#[cfg_attr(docsrs, doc(cfg(feature = "12-58-0")))]
31pub mod clips;
32
33#[derive(Serialize, Default, Debug, Clone, TypedBuilder)]
34#[serde(rename_all = "camelCase")]
35#[builder(doc)]
36pub struct Request {
37 #[serde(skip_serializing_if = "Option::is_none")]
38 #[builder(default, setter(strip_option))]
39 pub local: Option<bool>,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 #[builder(default, setter(strip_option))]
42 pub reply: Option<bool>,
43 #[serde(skip_serializing_if = "Option::is_none")]
44 #[builder(default, setter(strip_option))]
45 pub renote: Option<bool>,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 #[builder(default, setter(strip_option))]
48 pub with_files: Option<bool>,
49 #[serde(skip_serializing_if = "Option::is_none")]
50 #[builder(default, setter(strip_option))]
51 pub poll: Option<bool>,
52 #[serde(skip_serializing_if = "Option::is_none")]
54 #[builder(default, setter(strip_option))]
55 pub limit: Option<u8>,
56 #[serde(skip_serializing_if = "Option::is_none")]
57 #[builder(default, setter(strip_option))]
58 pub since_id: Option<Id<Note>>,
59 #[serde(skip_serializing_if = "Option::is_none")]
60 #[builder(default, setter(strip_option))]
61 pub until_id: Option<Id<Note>>,
62}
63
64impl misskey_core::Request for Request {
65 type Response = Vec<Note>;
66 const ENDPOINT: &'static str = "notes";
67}
68
69impl_pagination!(Request, Note);
70
71#[cfg(test)]
72mod tests {
73 use super::Request;
74 use crate::test::{ClientExt, TestClient};
75
76 #[tokio::test]
77 async fn request() {
78 let client = TestClient::new();
79 client.test(Request::default()).await;
80 }
81
82 #[tokio::test]
83 async fn request_with_limit() {
84 let client = TestClient::new();
85 client
86 .test(Request {
87 local: None,
88 reply: None,
89 renote: None,
90 with_files: None,
91 poll: None,
92 limit: Some(100),
93 since_id: None,
94 until_id: None,
95 })
96 .await;
97 }
98
99 #[tokio::test]
100 async fn request_paginate() {
101 let client = TestClient::new();
102 let note = client.create_note(Some("test"), None, None).await;
103
104 client
105 .test(Request {
106 local: None,
107 reply: None,
108 renote: None,
109 with_files: None,
110 poll: None,
111 limit: None,
112 since_id: Some(note.id.clone()),
113 until_id: Some(note.id.clone()),
114 })
115 .await;
116 }
117}