use crate::Client;
use anyhow::{bail, Result};
use serde::{Deserialize, Serialize};
const CREATE_URL: &str = "https://oapi.dingtalk.com/chat/create";
impl Client {
pub async fn create_group(&self, req: CreateRequest) -> Result<(String, String)> {
let token = self.token().await?;
let resp: CreateResposne = self
.post(format!("{}?access_token={}", CREATE_URL, token), req)
.await?;
if resp.errcode != 0 {
bail!("create group error: {} - {}", resp.errcode, resp.errmsg);
}
Ok((resp.open_conversation_id, resp.chatid))
}
}
#[derive(Serialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct CreateRequest {
pub name: String,
pub owner: String,
pub useridlist: Vec<String>,
pub show_history_type: u8,
pub searchable: u8,
pub validation_type: u8,
pub mention_all_authority: u8,
pub management_type: u8,
pub chat_banned_type: u8,
}
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
struct CreateResposne {
#[serde(default)]
open_conversation_id: String,
#[serde(default)]
chatid: String,
#[serde(default)]
#[allow(dead_code)]
conversation_tag: u32,
errmsg: String,
errcode: u32,
}