use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize)]
pub struct TemplateDataItem {
pub value: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub color: Option<String>,
}
impl TemplateDataItem {
pub fn new(value: impl Into<String>) -> Self {
Self {
value: value.into(),
color: None,
}
}
pub fn with_color(mut self, color: impl Into<String>) -> Self {
self.color = Some(color.into());
self
}
}
#[derive(Debug, Clone, Serialize)]
pub struct TemplateMiniProgram {
pub appid: String,
pub pagepath: Option<String>,
}
#[derive(Debug, Clone, Serialize)]
pub struct TemplateMessage {
pub touser: String,
pub template_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub miniprogram: Option<TemplateMiniProgram>,
pub data: HashMap<String, TemplateDataItem>,
#[serde(skip_serializing_if = "Option::is_none")]
pub client_msg_id: Option<String>,
}
impl TemplateMessage {
pub fn new(
to_user: impl Into<String>,
template_id: impl Into<String>,
data: HashMap<String, TemplateDataItem>,
) -> Self {
Self {
touser: to_user.into(),
template_id: template_id.into(),
url: None,
miniprogram: None,
data,
client_msg_id: None,
}
}
pub fn with_url(mut self, url: impl Into<String>) -> Self {
self.url = Some(url.into());
self
}
pub fn with_miniprogram(mut self, appid: impl Into<String>, pagepath: Option<String>) -> Self {
self.miniprogram = Some(TemplateMiniProgram {
appid: appid.into(),
pagepath,
});
self
}
pub fn with_client_msg_id(mut self, id: impl Into<String>) -> Self {
self.client_msg_id = Some(id.into());
self
}
}
#[derive(Debug, Clone, Deserialize)]
pub struct SendTemplateResponse {
pub errcode: i64,
pub errmsg: String,
pub msgid: Option<i64>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct TemplateItem {
pub template_id: String,
pub title: String,
pub primary_industry: String,
pub deputy_industry: String,
pub content: String,
pub example: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct TemplateListResponse {
pub template_list: Vec<TemplateItem>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct Industry {
pub first_class: String,
pub second_class: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct GetIndustryResponse {
pub primary_industry: Industry,
pub secondary_industry: Industry,
}