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 /// * TEXT - text message
/// * MARKDONW - markdown message /// * MARKDONW - markdown message
/// * LINK - link message /// * LINK - link message
#[derive(Clone, Copy, Debug)] #[derive(Clone, Copy, Debug, PartialEq)]
pub enum DingTalkMessageType { pub enum DingTalkMessageType {
TEXT, TEXT,
LINK, LINK,
MARKDOWN, MARKDOWN,
// ACTION_CARD, todo!() // ACTION_CARD, todo!()
FEEDCARD,
} }
/// Default DingTalkMessageType is TEXT /// Default DingTalkMessageType is TEXT
@@ -63,6 +64,14 @@ impl Default for DingTalkMessageType {
fn default() -> Self { DingTalkMessageType::TEXT } 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 /// DingTalk message
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct DingTalkMessage<'a> { pub struct DingTalkMessage<'a> {
@@ -74,6 +83,7 @@ pub struct DingTalkMessage<'a> {
pub link_title: &'a str, pub link_title: &'a str,
pub link_pic_url: &'a str, pub link_pic_url: &'a str,
pub link_message_url: &'a str, pub link_message_url: &'a str,
pub feed_card_links: Vec<DingTalkMessageFeedCardLink>,
pub at_all: bool, pub at_all: bool,
pub at_mobiles: Vec<String>, pub at_mobiles: Vec<String>,
} }
@@ -226,7 +236,24 @@ impl <'a> DingTalk<'a> {
"text" => dingtalk_message.markdown_content, "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 { if dingtalk_message.at_all || dingtalk_message.at_mobiles.len() > 0 {
let mut at_mobiles = json::JsonValue::new_object(); let mut at_mobiles = json::JsonValue::new_object();
for m in &dingtalk_message.at_mobiles { for m in &dingtalk_message.at_mobiles {