misskey_api/endpoint/channels/
create.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 #[builder(setter(into))]
12 pub name: String,
13 #[builder(default, setter(strip_option, into))]
15 pub description: Option<String>,
16 #[builder(default, setter(strip_option))]
17 pub banner_id: Option<Id<DriveFile>>,
18}
19
20impl misskey_core::Request for Request {
21 type Response = Channel;
22 const ENDPOINT: &'static str = "channels/create";
23}
24
25#[cfg(test)]
26mod tests {
27 use super::Request;
28 use crate::test::{ClientExt, TestClient};
29
30 #[tokio::test]
31 async fn request() {
32 let client = TestClient::new();
33 client.test(Request {
34 name: "yCdKKHkRAmqhE49j3TBCVnnsQiZ2KkCK83z6NNKoGaiqQNOALsAOIz6XVJAcaV9lNbQYuuhSe7nAM8qdvUtokhWYWDO999z07N4ajtikDmzANpgwRh7rxMgb8PLsgcbm".to_string(),
36 description: None,
37 banner_id: None
38 }).await;
39 }
40
41 #[tokio::test]
42 async fn request_with_description() {
43 let client = TestClient::new();
44 client
45 .test(Request {
46 name: "test channel".to_string(),
47 description: Some("description".to_string()),
48 banner_id: None,
49 })
50 .await;
51 }
52
53 #[tokio::test]
54 async fn request_with_banner() {
55 let client = TestClient::new();
56 let url = client.avatar_url().await;
57 let file = client.upload_from_url(url).await;
58
59 client
60 .test(Request {
61 name: "test channel".to_string(),
62 description: None,
63 banner_id: Some(file.id),
64 })
65 .await;
66 }
67}