misskey_util/
lib.rs

1//! Utilities for working with `misskey-rs`.
2//!
3//! This crate wraps [`misskey-api`][misskey_api] to implement a convenient high-level API.
4//!
5//! [misskey_api]: https://docs.rs/misskey_api
6
7#![warn(missing_docs)]
8#![cfg_attr(docsrs, feature(doc_cfg))]
9
10macro_rules! update_builder_option_field {
11    (
12        #[doc_name = $doc_name:tt]
13        $(#[$m:meta])*
14        $v:vis $name:ident : $param_type:ty { $field_name:ident = $value:expr };
15        $($tail:tt)*
16    ) => {
17        paste::paste! {
18            #[doc = "Sets the " $doc_name "."]
19            $(#[$m])*
20            $v fn [<set_ $name>](&mut self, $name: $param_type) -> &mut Self {
21                self.request.$field_name.replace(Some($value));
22                self
23            }
24
25            #[doc = "Deletes the " $doc_name "."]
26            $(#[$m])*
27            $v fn [<delete_ $name>](&mut self) -> &mut Self {
28                self.request.$field_name.replace(None);
29                self
30            }
31
32            update_builder_option_field! { $($tail)* }
33        }
34    };
35    (
36        #[doc_name = $doc_name:tt]
37        $(#[$m:meta])*
38        $v:vis $name:ident : $param_type:ty { $field_name:ident };
39        $($tail:tt)*
40    ) => {
41        update_builder_option_field! {
42            #[doc_name = $doc_name]
43            $(#[$m])*
44            $v $name: $param_type { $field_name = ($field_name) };
45        }
46        update_builder_option_field! { $($tail)* }
47    };
48    (
49        $(#[$m:meta])*
50        $v:vis $name:ident $($tail:tt)*
51    ) => {
52        update_builder_option_field! { #[doc_name = $name] $(#[$m])* $v $name $($tail)* }
53    };
54    () => {};
55}
56
57macro_rules! update_builder_string_collection_field {
58    (
59        $(#[$m:meta])*
60        $v:vis $name:ident { $field_name:ident };
61        $($tail:tt)*
62    ) => {
63        $(#[$m])*
64        $v fn $name(&mut self, $name: impl IntoIterator<Item = impl Into<String>>) -> &mut Self {
65            self.request
66                .$field_name
67                .replace($name.into_iter().map(Into::into).collect());
68            self
69        }
70        update_builder_string_collection_field! { $($tail)* }
71    };
72    (
73        $(#[$m:meta])*
74        $v:vis $name:ident;
75        $($tail:tt)*
76    ) => {
77        update_builder_string_collection_field! {
78            $(#[$m])*
79            $v $name { $name };
80        }
81        update_builder_string_collection_field! { $($tail)* }
82    };
83    () => {};
84}
85
86macro_rules! update_builder_string_option_field {
87    (
88        #[doc_name = $doc_name:tt]
89        $(#[$m:meta])*
90        $v:vis $name:ident { $field_name:ident };
91        $($tail:tt)*
92    ) => {
93        update_builder_option_field! {
94            #[doc_name = $doc_name]
95            $(#[$m])*
96            $v $name: impl Into<String> { $field_name = $name.into() };
97        }
98        update_builder_string_option_field! { $($tail)* }
99    };
100    (
101        $(#[$m:meta])*
102        $v:vis $name:ident { $field_name:ident };
103        $($tail:tt)*
104    ) => {
105        update_builder_option_field! {
106            $(#[$m])*
107            $v $name: impl Into<String> { $field_name = $name.into() };
108        }
109        update_builder_string_option_field! { $($tail)* }
110    };
111    (
112        #[doc_name = $doc_name:tt]
113        $(#[$m:meta])*
114        $v:vis $name:ident;
115        $($tail:tt)*
116    ) => {
117        update_builder_string_option_field! {
118            #[doc_name = $doc_name]
119            $(#[$m])*
120            $v $name { $name };
121        }
122        update_builder_string_option_field! { $($tail)* }
123    };
124    (
125        $(#[$m:meta])*
126        $v:vis $name:ident;
127        $($tail:tt)*
128    ) => {
129        update_builder_string_option_field! {
130            $(#[$m])*
131            $v $name { $name };
132        }
133        update_builder_string_option_field! { $($tail)* }
134    };
135    () => {};
136}
137
138macro_rules! update_builder_bool_field {
139    (
140        $(#[$m:meta])*
141        $v:vis $name:ident { $field_name:ident };
142        $($tail:tt)*
143    ) => {
144        $(#[$m])*
145        $v fn $name(&mut self, $name: bool) -> &mut Self {
146            self.request.$field_name.replace($name);
147            self
148        }
149        update_builder_bool_field! { $($tail)* }
150    };
151    (
152        $(#[$m:meta])*
153        $v:vis $name:ident;
154        $($tail:tt)*
155    ) => {
156        update_builder_bool_field! {
157            $(#[$m])*
158            $v $name { $name };
159        }
160        update_builder_bool_field! { $($tail)* }
161    };
162    () => {};
163}
164
165mod error;
166pub use error::Error;
167
168mod client;
169pub use client::{ClientExt, UploadFileClientExt};
170
171mod streaming;
172pub use streaming::StreamingClientExt;
173
174pub mod builder;
175pub mod pager;
176
177mod timeline;
178pub use timeline::{TimelineCursor, TimelineRange};