misskey_api/endpoint/channels/
update.rs1use crate::model::{channel::Channel, drive::DriveFile, id::Id};
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 pub channel_id: Id<Channel>,
11 #[serde(skip_serializing_if = "Option::is_none")]
13 #[builder(default, setter(strip_option, into))]
14 pub name: Option<String>,
15 #[serde(skip_serializing_if = "Option::is_none")]
17 #[builder(default, setter(strip_option))]
18 pub description: Option<Option<String>>,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 #[builder(default, setter(strip_option))]
21 pub banner_id: Option<Option<Id<DriveFile>>>,
22}
23
24impl misskey_core::Request for Request {
25 type Response = Channel;
26 const ENDPOINT: &'static str = "channels/update";
27}
28
29#[cfg(test)]
30mod tests {
31 use super::Request;
32 use crate::test::{ClientExt, TestClient};
33
34 #[tokio::test]
35 async fn request_with_name() {
36 let client = TestClient::new();
37 let channel = client
38 .test(crate::endpoint::channels::create::Request {
39 name: "test channel".to_string(),
40 description: None,
41 banner_id: None,
42 })
43 .await;
44
45 client.test(Request {
46 channel_id: channel.id,
47 name: Some("yCdKKHkRAmqhE49j3TBCVnnsQiZ2KkCK83z6NNKoGaiqQNOALsAOIz6XVJAcaV9lNbQYuuhSe7nAM8qdvUtokhWYWDO999z07N4ajtikDmzANpgwRh7rxMgb8PLsgcbm".to_string()),
49 description: None,
50 banner_id: None,
51 }).await;
52 }
53
54 #[tokio::test]
55 async fn request_with_description() {
56 let client = TestClient::new();
57 let channel = client
58 .test(crate::endpoint::channels::create::Request {
59 name: "test channel".to_string(),
60 description: None,
61 banner_id: None,
62 })
63 .await;
64
65 client
66 .test(Request {
67 channel_id: channel.id.clone(),
68 name: None,
69 description: Some(Some("description".to_string())),
70 banner_id: None,
71 })
72 .await;
73 client
74 .test(Request {
75 channel_id: channel.id,
76 name: None,
77 description: Some(None),
78 banner_id: None,
79 })
80 .await;
81 }
82
83 #[tokio::test]
84 async fn request_with_banner() {
85 let client = TestClient::new();
86 let channel = client
87 .test(crate::endpoint::channels::create::Request {
88 name: "test channel".to_string(),
89 description: None,
90 banner_id: None,
91 })
92 .await;
93 let url = client.avatar_url().await;
94 let file = client.upload_from_url(url).await;
95
96 client
97 .test(Request {
98 channel_id: channel.id.clone(),
99 name: None,
100 description: None,
101 banner_id: Some(Some(file.id)),
102 })
103 .await;
104 }
114}