add feed card

This commit is contained in:
2019-12-30 00:11:37 +08:00
parent 77a6bf8eed
commit 4a991d673f

View File

@@ -49,12 +49,13 @@ pub struct DingTalk<'a> {
/// * TEXT - text message
/// * MARKDONW - markdown message
/// * LINK - link message
#[derive(Clone, Copy, Debug)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum DingTalkMessageType {
TEXT,
LINK,
MARKDOWN,
// ACTION_CARD, todo!()
FEEDCARD,
}
/// Default DingTalkMessageType is TEXT
@@ -63,6 +64,14 @@ impl Default for DingTalkMessageType {
fn default() -> Self { DingTalkMessageType::TEXT }
}
/// DingTalk message feed card link
#[derive(Debug)]
pub struct DingTalkMessageFeedCardLink {
pub title: String,
pub message_url: String,
pub pic_url: String,
}
/// DingTalk message
#[derive(Debug, Default)]
pub struct DingTalkMessage<'a> {
@@ -74,6 +83,7 @@ pub struct DingTalkMessage<'a> {
pub link_title: &'a str,
pub link_pic_url: &'a str,
pub link_message_url: &'a str,
pub feed_card_links: Vec<DingTalkMessageFeedCardLink>,
pub at_all: bool,
pub at_mobiles: Vec<String>,
}
@@ -226,7 +236,24 @@ impl <'a> DingTalk<'a> {
"text" => dingtalk_message.markdown_content,
}
},
DingTalkMessageType::FEEDCARD => object!{
"msgtype" => "feedCard",
},
};
if DingTalkMessageType::FEEDCARD == dingtalk_message.message_type {
let mut links: Vec<json::JsonValue> = vec![];
for feed_card_link in &dingtalk_message.feed_card_links {
let link = object!{
"title" => feed_card_link.title.as_str(),
"messageURL" => feed_card_link.message_url.as_str(),
"picURL" => feed_card_link.pic_url.as_str(),
};
links.push(link);
}
message_json["feedCard"] = object!{
"links" => json::JsonValue::Array(links),
};
}
if dingtalk_message.at_all || dingtalk_message.at_mobiles.len() > 0 {
let mut at_mobiles = json::JsonValue::new_object();
for m in &dingtalk_message.at_mobiles {