use derive_builder::Builder;
use serde::{ Deserialize, Serialize};
use serde_json::json;
use crate::{core::request::RequestBuilder, RPayResult};
#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
#[builder(pattern = "mutable")]
pub struct Templates {
#[builder(setter(into))]
pub access_token: String
}
impl Templates {
pub async fn delete(&mut self, template_id: String) -> RPayResult<Response> {
let body = json!({
"priTmplId": template_id
});
println!("body = {}", body);
let url = format!("https://api.weixin.qq.com/wxaapi/newtmpl/deltemplate?access_token={}", self.access_token);
let resp = RequestBuilder::default()
.url(url)
.body(body.to_string())
.build()?.send::<Response>().await?;
Ok(resp)
}
pub async fn get_category(&self) -> RPayResult<TemplatesResponse<Vec<CategoryResponse>>> {
let url = format!("https://api.weixin.qq.com/wxaapi/newtmpl/getcategory?access_token={}", self.access_token);
let resp = RequestBuilder::default()
.url(url)
.build()?.send().await?;
Ok(resp)
}
pub async fn get_pub_template_keywords(&self, tid: String) -> RPayResult<TemplatesResponse<Vec<KeywordsResponse>>> {
let url = format!("https://api.weixin.qq.com/wxaapi/newtmpl/getpubtemplatekeywords?access_token={}&tid={}", self.access_token, tid);
let resp = RequestBuilder::default()
.url(url)
.build()?.send().await?;
Ok(resp)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeywordsResponse {
pub kid: i64,
pub name: String,
pub example: String,
pub rule: String
}
#[derive(Debug, Clone, Serialize, Deserialize, Builder)]
pub struct Response {
pub errmsg: String,
pub errcode: i64
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CategoryResponse {
pub id: i64,
pub name: String
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TemplatesResponse<T> {
pub errmsg: String,
pub errcode: i64,
pub data: Option<T>
}