dingtalk_stream_sdk_rust/group.rs
1//! Types and methods to create group
2//
3use crate::Client;
4use anyhow::{bail, Result};
5use serde::{Deserialize, Serialize};
6
7const CREATE_URL: &str = "https://oapi.dingtalk.com/chat/create";
8
9impl Client {
10 /// create group via [`CreateRequest`], return group (open_conversation_id, chatid)
11 pub async fn create_group(&self, req: CreateRequest) -> Result<(String, String)> {
12 let token = self.token().await?;
13 let resp: CreateResposne = self
14 .post(format!("{}?access_token={}", CREATE_URL, token), req)
15 .await?;
16
17 if resp.errcode != 0 {
18 bail!("create group error: {} - {}", resp.errcode, resp.errmsg);
19 }
20
21 Ok((resp.open_conversation_id, resp.chatid))
22 }
23}
24
25/// group create request
26///
27/// refer to [official doc](https://open.dingtalk.com/document/orgapp/create-group-session#h2-3kz-gpn-suq) see more detail for each field
28#[derive(Serialize, Default)]
29#[serde(rename_all = "camelCase")]
30pub struct CreateRequest {
31 pub name: String,
32 pub owner: String,
33 pub useridlist: Vec<String>,
34
35 /// Can new members view 100 historical messages
36 /// - 1: can
37 /// - 0: can not (default)
38 pub show_history_type: u8,
39
40 /// Can the group be searched
41 /// - 0: can not (default)
42 /// - 1: can
43 pub searchable: u8,
44
45 /// Do user need verification to join the group
46 /// - 0: need not (default)
47 /// - 1: need
48 pub validation_type: u8,
49
50 /// @all usage scope
51 /// - 0: all people can use @all (default)
52 /// - 1: only group owner can use @all
53 pub mention_all_authority: u8,
54
55 /// Group management type
56 /// - 0: everyone can manage (default)
57 /// - 1: only group owner can manage
58 pub management_type: u8,
59
60 /// Whether to enable chat banned in group
61 /// - 0: no (default)
62 /// - 1: yes
63 pub chat_banned_type: u8,
64}
65
66/// group create response
67///
68/// refer to [official doc](https://open.dingtalk.com/document/orgapp/create-group-session#h2-xyy-jpo-c7q) for more details
69#[derive(Deserialize)]
70#[serde(rename_all = "camelCase")]
71struct CreateResposne {
72 #[serde(default)]
73 open_conversation_id: String,
74 #[serde(default)]
75 chatid: String,
76 #[serde(default)]
77 #[allow(dead_code)]
78 conversation_tag: u32,
79 errmsg: String,
80 errcode: u32,
81}