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}