From 198839c0f2d881b587205976d553d85663ea4a13 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Fri, 20 Dec 2019 23:13:35 +0800 Subject: [PATCH] v 0.0.2 -> 0.1.0 --- Cargo.toml | 2 +- README.md | 8 ++++++-- src/lib.rs | 43 +++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0f4736a..53fae15 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dingtalk" -version = "0.0.3" +version = "0.1.0" authors = ["Hatter Jiang "] edition = "2018" description = "DingTalk Util" diff --git a/README.md b/README.md index ea70e6b..c292a37 100644 --- a/README.md +++ b/README.md @@ -5,15 +5,19 @@ DingTalk util 钉钉机器人 Rust SDK ```rust -pub fn main() { +pub fn main() -> Result<(), Box> { let dt = DingTalk::new("", ""); - 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 diff --git a/src/lib.rs b/src/lib.rs index a941376..b6c9492 100644 --- a/src/lib.rs +++ b/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, } @@ -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> { 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> { + 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> { let client = reqwest::Client::new();