v 0.0.2 -> 0.1.0
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "dingtalk"
|
||||
version = "0.0.3"
|
||||
version = "0.1.0"
|
||||
authors = ["Hatter Jiang <jht5945@gmail.com>"]
|
||||
edition = "2018"
|
||||
description = "DingTalk Util"
|
||||
|
||||
@@ -5,15 +5,19 @@ DingTalk util
|
||||
钉钉机器人 Rust SDK
|
||||
|
||||
```rust
|
||||
pub fn main() {
|
||||
pub fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let dt = DingTalk::new("<token>", "");
|
||||
dt.send_text("Hello world!").ok();
|
||||
dt.send_text("Hello world!")?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
#### Changelog
|
||||
|
||||
* v0.1.0
|
||||
* Add `DingTalk::send_link(...)`, send link message
|
||||
* v0.0.3
|
||||
* Add `DingTalkMessage` , can set at_all, at_mobiles now
|
||||
|
||||
|
||||
43
src/lib.rs
43
src/lib.rs
@@ -21,6 +21,7 @@ const APPLICATION_JSON_UTF8: &str = "application/json; charset=utf-8";
|
||||
const DEFAULT_DINGTALK_ROBOT_URL: &str = "https://oapi.dingtalk.com/robot/send?access_token=";
|
||||
|
||||
/// `DingTalk` is a simple SDK for DingTalk webhook robot
|
||||
///
|
||||
/// Document https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
|
||||
///
|
||||
/// Sample code:
|
||||
@@ -44,8 +45,9 @@ pub struct DingTalk<'a> {
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
pub enum DingTalkMessageType {
|
||||
TEXT,
|
||||
// LINK,
|
||||
LINK,
|
||||
MARKDOWN,
|
||||
// ACTION_CARD, todo!()
|
||||
}
|
||||
|
||||
/// DingTalk message
|
||||
@@ -54,6 +56,10 @@ pub struct DingTalkMessage<'a> {
|
||||
pub text_content: &'a str,
|
||||
pub markdown_title: &'a str,
|
||||
pub markdown_content: &'a str,
|
||||
pub link_text: &'a str,
|
||||
pub link_title: &'a str,
|
||||
pub link_pic_url: &'a str,
|
||||
pub link_message_url: &'a str,
|
||||
pub at_all: bool,
|
||||
pub at_mobiles: Vec<String>,
|
||||
}
|
||||
@@ -69,6 +75,11 @@ impl <'a> DingTalkMessage<'a> {
|
||||
pub fn new_markdown(markdown_title: &'a str, markdown_content: &'a str) -> Self {
|
||||
Self::new(DingTalkMessageType::MARKDOWN).markdown(markdown_title, markdown_content)
|
||||
}
|
||||
|
||||
/// New link DingTalk message
|
||||
pub fn new_link(link_title: &'a str, link_text: &'a str, link_pic_url: &'a str, link_message_url: &'a str) -> Self {
|
||||
Self::new(DingTalkMessageType::LINK).link(link_title, link_text, link_pic_url, link_message_url)
|
||||
}
|
||||
|
||||
/// New DingTalk message
|
||||
pub fn new(message_type: DingTalkMessageType) -> Self {
|
||||
@@ -77,6 +88,10 @@ impl <'a> DingTalkMessage<'a> {
|
||||
text_content: "",
|
||||
markdown_title: "",
|
||||
markdown_content: "",
|
||||
link_text: "",
|
||||
link_title: "",
|
||||
link_pic_url: "",
|
||||
link_message_url: "",
|
||||
at_all: false,
|
||||
at_mobiles: vec![],
|
||||
}
|
||||
@@ -88,6 +103,15 @@ impl <'a> DingTalkMessage<'a> {
|
||||
self
|
||||
}
|
||||
|
||||
/// Set link
|
||||
pub fn link(mut self, link_title: &'a str, link_text: &'a str, link_pic_url: &'a str, link_message_url: &'a str) -> Self {
|
||||
self.link_title = link_title;
|
||||
self.link_text = link_text;
|
||||
self.link_pic_url = link_pic_url;
|
||||
self.link_message_url = link_message_url;
|
||||
self
|
||||
}
|
||||
|
||||
/// Set markdown
|
||||
pub fn markdown(mut self, markdown_title: &'a str, markdown_content: &'a str) -> Self {
|
||||
self.markdown_title = markdown_title;
|
||||
@@ -121,6 +145,7 @@ impl <'a> DingTalk<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
/// Send DingTalk message
|
||||
pub fn send_message(&self, dingtalk_message: &DingTalkMessage) -> Result<(), Box<dyn std::error::Error>> {
|
||||
let mut message_json = match dingtalk_message.message_type {
|
||||
DingTalkMessageType::TEXT => object!{
|
||||
@@ -129,7 +154,16 @@ impl <'a> DingTalk<'a> {
|
||||
"content" => dingtalk_message.text_content,
|
||||
}
|
||||
},
|
||||
DingTalkMessageType::MARKDOWN => object!{
|
||||
DingTalkMessageType::LINK => object!{
|
||||
"msgtype" => "link",
|
||||
"link" => object!{
|
||||
"text" => dingtalk_message.link_text,
|
||||
"title" => dingtalk_message.link_title,
|
||||
"picUrl" => dingtalk_message.link_pic_url,
|
||||
"messageUrl" => dingtalk_message.link_message_url,
|
||||
}
|
||||
},
|
||||
DingTalkMessageType::MARKDOWN => object!{
|
||||
"msgtype" => "markdown",
|
||||
"markdown" => object! {
|
||||
"title" => dingtalk_message.markdown_title,
|
||||
@@ -160,6 +194,11 @@ impl <'a> DingTalk<'a> {
|
||||
self.send_message(&DingTalkMessage::new_markdown(title, text))
|
||||
}
|
||||
|
||||
/// Send link message
|
||||
pub fn send_link(&self, link_title: &'a str, link_text: &'a str, link_pic_url: &'a str, link_message_url: &'a str) -> Result<(), Box<dyn std::error::Error>> {
|
||||
self.send_message(&DingTalkMessage::new_link(link_title, link_text, link_pic_url, link_message_url))
|
||||
}
|
||||
|
||||
/// Direct send JSON message
|
||||
pub fn send(&self, json_message: &str) -> Result<(), Box<dyn std::error::Error>> {
|
||||
let client = reqwest::Client::new();
|
||||
|
||||
Reference in New Issue
Block a user