misskey_api/endpoint/admin/
update_meta.rs

1#[cfg(feature = "12-62-0")]
2use crate::model::clip::Clip;
3use crate::model::{id::Id, user::User};
4
5use serde::Serialize;
6use typed_builder::TypedBuilder;
7use url::Url;
8
9#[derive(Serialize, Default, Debug, Clone, TypedBuilder)]
10#[serde(rename_all = "camelCase")]
11#[builder(doc)]
12pub struct Request {
13    #[builder(default, setter(strip_option))]
14    pub disable_registration: Option<bool>,
15    #[builder(default, setter(strip_option))]
16    pub disable_local_timeline: Option<bool>,
17    #[builder(default, setter(strip_option))]
18    pub disable_global_timeline: Option<bool>,
19    #[builder(default, setter(strip_option))]
20    pub use_star_for_reaction_fallback: Option<bool>,
21    #[builder(default, setter(strip_option))]
22    pub pinned_users: Option<Vec<String>>,
23    #[cfg(feature = "12-58-0")]
24    #[cfg_attr(docsrs, doc(cfg(feature = "12-58-0")))]
25    #[serde(skip_serializing_if = "Option::is_none")]
26    #[builder(default, setter(strip_option))]
27    pub pinned_pages: Option<Vec<String>>,
28    #[cfg(feature = "12-62-0")]
29    #[cfg_attr(docsrs, doc(cfg(feature = "12-62-0")))]
30    #[serde(skip_serializing_if = "Option::is_none")]
31    #[builder(default, setter(strip_option))]
32    pub pinned_clip_id: Option<Option<Id<Clip>>>,
33    #[builder(default, setter(strip_option))]
34    pub hidden_tags: Option<Vec<String>>,
35    #[builder(default, setter(strip_option))]
36    pub blocked_hosts: Option<Vec<String>>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    #[builder(default, setter(strip_option))]
39    pub mascot_image_url: Option<Option<String>>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    #[builder(default, setter(strip_option))]
42    pub bannar_url: Option<Option<String>>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    #[builder(default, setter(strip_option))]
45    pub icon_url: Option<Option<String>>,
46    #[cfg(feature = "12-60-0")]
47    #[cfg_attr(docsrs, doc(cfg(feature = "12-60-0")))]
48    #[serde(skip_serializing_if = "Option::is_none")]
49    #[builder(default, setter(strip_option))]
50    pub background_image_url: Option<Option<String>>,
51    #[cfg(feature = "12-60-0")]
52    #[cfg_attr(docsrs, doc(cfg(feature = "12-60-0")))]
53    #[serde(skip_serializing_if = "Option::is_none")]
54    #[builder(default, setter(strip_option))]
55    pub logo_image_url: Option<Option<String>>,
56    #[serde(skip_serializing_if = "Option::is_none")]
57    #[builder(default, setter(strip_option))]
58    pub name: Option<Option<String>>,
59    #[serde(skip_serializing_if = "Option::is_none")]
60    #[builder(default, setter(strip_option))]
61    pub description: Option<Option<String>>,
62    #[serde(skip_serializing_if = "Option::is_none")]
63    #[builder(default, setter(strip_option))]
64    pub max_note_text_length: Option<u64>,
65    #[serde(skip_serializing_if = "Option::is_none")]
66    #[builder(default, setter(strip_option))]
67    pub local_drive_capacity_mb: Option<u64>,
68    #[serde(skip_serializing_if = "Option::is_none")]
69    #[builder(default, setter(strip_option))]
70    pub remote_drive_capacity_mb: Option<u64>,
71    #[serde(skip_serializing_if = "Option::is_none")]
72    #[builder(default, setter(strip_option))]
73    pub cache_remote_files: Option<bool>,
74    #[serde(skip_serializing_if = "Option::is_none")]
75    #[builder(default, setter(strip_option))]
76    pub proxy_remote_files: Option<bool>,
77    #[cfg(feature = "12-37-0")]
78    #[cfg_attr(docsrs, doc(cfg(feature = "12-37-0")))]
79    #[serde(skip_serializing_if = "Option::is_none")]
80    #[builder(default, setter(strip_option))]
81    pub enable_hcaptcha: Option<bool>,
82    #[cfg(feature = "12-37-0")]
83    #[cfg_attr(docsrs, doc(cfg(feature = "12-37-0")))]
84    #[serde(skip_serializing_if = "Option::is_none")]
85    #[builder(default, setter(strip_option))]
86    pub hcaptcha_site_key: Option<Option<String>>,
87    #[cfg(feature = "12-37-0")]
88    #[cfg_attr(docsrs, doc(cfg(feature = "12-37-0")))]
89    #[serde(skip_serializing_if = "Option::is_none")]
90    #[builder(default, setter(strip_option))]
91    pub hcaptcha_secret_key: Option<Option<String>>,
92    #[serde(skip_serializing_if = "Option::is_none")]
93    #[builder(default, setter(strip_option))]
94    pub enable_recaptcha: Option<bool>,
95    #[serde(skip_serializing_if = "Option::is_none")]
96    #[builder(default, setter(strip_option))]
97    pub recaptcha_site_key: Option<Option<String>>,
98    #[serde(skip_serializing_if = "Option::is_none")]
99    #[builder(default, setter(strip_option))]
100    pub recaptcha_secret_key: Option<Option<String>>,
101    #[serde(skip_serializing_if = "Option::is_none")]
102    #[builder(default, setter(strip_option))]
103    pub proxy_account_id: Option<Option<Id<User>>>,
104    #[serde(skip_serializing_if = "Option::is_none")]
105    #[builder(default, setter(strip_option))]
106    pub maintainer_name: Option<Option<String>>,
107    #[serde(skip_serializing_if = "Option::is_none")]
108    #[builder(default, setter(strip_option))]
109    pub maintainer_email: Option<Option<String>>,
110    #[serde(skip_serializing_if = "Option::is_none")]
111    #[builder(default, setter(strip_option))]
112    pub langs: Option<Vec<String>>,
113    #[serde(skip_serializing_if = "Option::is_none")]
114    #[builder(default, setter(strip_option))]
115    pub summaly_proxy: Option<Option<Url>>,
116    #[serde(skip_serializing_if = "Option::is_none")]
117    #[builder(default, setter(strip_option))]
118    pub enable_twitter_integration: Option<bool>,
119    #[serde(skip_serializing_if = "Option::is_none")]
120    #[builder(default, setter(strip_option))]
121    pub twitter_consumer_key: Option<Option<String>>,
122    #[serde(skip_serializing_if = "Option::is_none")]
123    #[builder(default, setter(strip_option))]
124    pub twitter_consumer_secret: Option<Option<String>>,
125    #[serde(skip_serializing_if = "Option::is_none")]
126    #[builder(default, setter(strip_option))]
127    pub enable_github_integration: Option<bool>,
128    #[serde(skip_serializing_if = "Option::is_none")]
129    #[builder(default, setter(strip_option))]
130    pub github_client_id: Option<Option<String>>,
131    #[serde(skip_serializing_if = "Option::is_none")]
132    #[builder(default, setter(strip_option))]
133    pub github_client_secret: Option<Option<String>>,
134    #[serde(skip_serializing_if = "Option::is_none")]
135    #[builder(default, setter(strip_option))]
136    pub enable_discord_integration: Option<bool>,
137    #[serde(skip_serializing_if = "Option::is_none")]
138    #[builder(default, setter(strip_option))]
139    pub discord_client_id: Option<Option<String>>,
140    #[serde(skip_serializing_if = "Option::is_none")]
141    #[builder(default, setter(strip_option))]
142    pub discord_client_secret: Option<Option<String>>,
143    #[serde(skip_serializing_if = "Option::is_none")]
144    #[builder(default, setter(strip_option))]
145    pub enable_email: Option<bool>,
146    #[serde(skip_serializing_if = "Option::is_none")]
147    #[builder(default, setter(strip_option))]
148    pub email: Option<Option<String>>,
149    #[serde(skip_serializing_if = "Option::is_none")]
150    #[builder(default, setter(strip_option))]
151    pub smtp_secure: Option<bool>,
152    #[serde(skip_serializing_if = "Option::is_none")]
153    #[builder(default, setter(strip_option))]
154    pub smtp_host: Option<Option<String>>,
155    #[serde(skip_serializing_if = "Option::is_none")]
156    #[builder(default, setter(strip_option))]
157    pub smtp_port: Option<Option<u16>>,
158    #[serde(skip_serializing_if = "Option::is_none")]
159    #[builder(default, setter(strip_option))]
160    pub smtp_user: Option<Option<String>>,
161    #[serde(skip_serializing_if = "Option::is_none")]
162    #[builder(default, setter(strip_option))]
163    pub smtp_pass: Option<Option<String>>,
164    #[serde(skip_serializing_if = "Option::is_none")]
165    #[builder(default, setter(strip_option))]
166    pub error_image_url: Option<Option<String>>,
167    #[serde(skip_serializing_if = "Option::is_none")]
168    #[builder(default, setter(strip_option))]
169    pub enable_service_worker: Option<bool>,
170    #[serde(skip_serializing_if = "Option::is_none")]
171    #[builder(default, setter(strip_option))]
172    pub sw_public_key: Option<Option<String>>,
173    #[serde(skip_serializing_if = "Option::is_none")]
174    #[builder(default, setter(strip_option))]
175    pub sw_private_key: Option<Option<String>>,
176    #[serde(skip_serializing_if = "Option::is_none")]
177    #[builder(default, setter(strip_option))]
178    pub tos_url: Option<Option<String>>,
179    #[serde(skip_serializing_if = "Option::is_none")]
180    #[builder(default, setter(strip_option))]
181    pub repository_url: Option<Url>,
182    #[serde(skip_serializing_if = "Option::is_none")]
183    #[builder(default, setter(strip_option))]
184    pub feedback_url: Option<Option<String>>,
185    #[serde(skip_serializing_if = "Option::is_none")]
186    #[builder(default, setter(strip_option))]
187    pub use_object_storage: Option<bool>,
188    #[serde(skip_serializing_if = "Option::is_none")]
189    #[builder(default, setter(strip_option))]
190    pub object_storage_base_url: Option<Option<Url>>,
191    #[serde(skip_serializing_if = "Option::is_none")]
192    #[builder(default, setter(strip_option))]
193    pub object_storage_bucket: Option<Option<String>>,
194    #[serde(skip_serializing_if = "Option::is_none")]
195    #[builder(default, setter(strip_option))]
196    pub object_storage_prefix: Option<Option<String>>,
197    #[serde(skip_serializing_if = "Option::is_none")]
198    #[builder(default, setter(strip_option))]
199    pub object_storage_endpoint: Option<Option<String>>,
200    #[serde(skip_serializing_if = "Option::is_none")]
201    #[builder(default, setter(strip_option))]
202    pub object_storage_region: Option<Option<String>>,
203    #[serde(skip_serializing_if = "Option::is_none")]
204    #[builder(default, setter(strip_option))]
205    pub object_storage_port: Option<Option<u16>>,
206    #[serde(skip_serializing_if = "Option::is_none")]
207    #[builder(default, setter(strip_option))]
208    pub object_storage_access_key: Option<Option<String>>,
209    #[serde(skip_serializing_if = "Option::is_none")]
210    #[builder(default, setter(strip_option))]
211    pub object_storage_secret_key: Option<Option<String>>,
212    #[serde(
213        rename = "objectStorageUseSSL",
214        skip_serializing_if = "Option::is_none"
215    )]
216    #[builder(default, setter(strip_option))]
217    pub object_storage_use_ssl: Option<bool>,
218    #[cfg(feature = "12-31-0")]
219    #[cfg_attr(docsrs, doc(cfg(feature = "12-31-0")))]
220    #[serde(skip_serializing_if = "Option::is_none")]
221    #[builder(default, setter(strip_option))]
222    pub object_storage_use_proxy: Option<bool>,
223    #[cfg(feature = "12-47-0")]
224    #[cfg_attr(docsrs, doc(cfg(feature = "12-47-0")))]
225    #[serde(skip_serializing_if = "Option::is_none")]
226    #[builder(default, setter(strip_option))]
227    pub object_storage_set_public_read: Option<bool>,
228}
229
230impl misskey_core::Request for Request {
231    type Response = ();
232    const ENDPOINT: &'static str = "admin/update-meta";
233}
234
235#[cfg(test)]
236mod tests {
237    use super::Request;
238    use crate::test::{ClientExt, TestClient};
239
240    // this will fail with requests without any updates
241    #[tokio::test]
242    async fn request_with_name() {
243        let client = TestClient::new();
244        client
245            .admin
246            .test(
247                Request::builder()
248                    .name(Some("instance name".to_string()))
249                    .build(),
250            )
251            .await;
252    }
253
254    #[tokio::test]
255    async fn request_with_options() {
256        let client = TestClient::new();
257        let image_url = client.avatar_url().await;
258
259        client
260            .admin
261            .test(Request {
262                disable_registration: Some(false),
263                disable_local_timeline: Some(false),
264                disable_global_timeline: Some(false),
265                use_star_for_reaction_fallback: Some(false),
266                #[cfg(feature = "12-58-0")]
267                pinned_pages: Some(vec!["/announcements".to_string()]),
268                #[cfg(feature = "12-62-0")]
269                pinned_clip_id: Some(None),
270                pinned_users: Some(vec!["@admin".to_string(), "@testuser".to_string()]),
271                hidden_tags: Some(vec!["not_good".to_string()]),
272                blocked_hosts: Some(vec!["not.good.host".to_string()]),
273                mascot_image_url: Some(Some(image_url.to_string())),
274                bannar_url: Some(Some(image_url.to_string())),
275                icon_url: Some(Some(image_url.to_string())),
276                #[cfg(feature = "12-60-0")]
277                background_image_url: Some(Some(image_url.to_string())),
278                #[cfg(feature = "12-60-0")]
279                logo_image_url: Some(Some(image_url.to_string())),
280                name: None,
281                description: Some(Some("description!".to_string())),
282                max_note_text_length: Some(1000),
283                local_drive_capacity_mb: Some(1000),
284                remote_drive_capacity_mb: Some(1000),
285                cache_remote_files: Some(true),
286                proxy_remote_files: Some(true),
287                #[cfg(feature = "12-37-0")]
288                enable_hcaptcha: Some(false),
289                #[cfg(feature = "12-37-0")]
290                hcaptcha_site_key: Some(None),
291                #[cfg(feature = "12-37-0")]
292                hcaptcha_secret_key: Some(None),
293                enable_recaptcha: Some(false),
294                recaptcha_site_key: Some(None),
295                recaptcha_secret_key: Some(None),
296                proxy_account_id: Some(None),
297                maintainer_name: Some(Some("coord_e".to_string())),
298                maintainer_email: Some(Some("me@coord-e.com".to_string())),
299                langs: Some(vec!["ja_JP".to_string()]),
300                summaly_proxy: Some(None),
301                enable_twitter_integration: Some(false),
302                twitter_consumer_key: Some(None),
303                twitter_consumer_secret: Some(None),
304                enable_github_integration: Some(false),
305                github_client_id: Some(None),
306                github_client_secret: Some(None),
307                enable_discord_integration: Some(false),
308                discord_client_id: Some(None),
309                discord_client_secret: Some(None),
310                enable_email: Some(false),
311                email: Some(None),
312                smtp_secure: Some(true),
313                smtp_host: Some(None),
314                smtp_port: Some(None),
315                smtp_user: Some(None),
316                smtp_pass: Some(None),
317                error_image_url: Some(Some(image_url.to_string())),
318                enable_service_worker: Some(false),
319                sw_public_key: Some(None),
320                sw_private_key: Some(None),
321                tos_url: Some(None),
322                repository_url: Some(image_url.clone()),
323                feedback_url: Some(Some(image_url.to_string())),
324                use_object_storage: Some(false),
325                object_storage_base_url: Some(None),
326                object_storage_bucket: Some(None),
327                object_storage_prefix: Some(None),
328                object_storage_endpoint: Some(None),
329                object_storage_region: Some(None),
330                object_storage_port: Some(None),
331                object_storage_access_key: Some(None),
332                object_storage_secret_key: Some(None),
333                object_storage_use_ssl: Some(false),
334                #[cfg(feature = "12-31-0")]
335                object_storage_use_proxy: Some(false),
336                #[cfg(feature = "12-47-0")]
337                object_storage_set_public_read: Some(false),
338            })
339            .await;
340    }
341}