use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Article {
pub title: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub author: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub digest: Option<String>,
pub content: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub content_source_url: Option<String>,
pub thumb_media_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub need_open_comment: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub only_fans_can_comment: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pic_crop_235_1: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pic_crop_1_1: Option<String>,
}
impl Article {
pub fn new(
title: impl Into<String>,
content: impl Into<String>,
thumb_media_id: impl Into<String>,
) -> Self {
Self {
title: title.into(),
author: None,
digest: None,
content: content.into(),
content_source_url: None,
thumb_media_id: thumb_media_id.into(),
need_open_comment: None,
only_fans_can_comment: None,
pic_crop_235_1: None,
pic_crop_1_1: None,
}
}
pub fn with_author(mut self, author: impl Into<String>) -> Self {
self.author = Some(author.into());
self
}
pub fn with_digest(mut self, digest: impl Into<String>) -> Self {
self.digest = Some(digest.into());
self
}
pub fn with_content_source_url(mut self, url: impl Into<String>) -> Self {
self.content_source_url = Some(url.into());
self
}
}
#[derive(Debug, Clone, Serialize)]
pub struct DraftAddRequest {
pub articles: Vec<Article>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct DraftAddResponse {
pub media_id: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct DraftItem {
pub media_id: String,
pub content: DraftContent,
pub update_time: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct DraftContent {
pub news_item: Vec<DraftArticle>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct DraftArticle {
pub title: String,
pub author: Option<String>,
pub digest: Option<String>,
pub content: String,
pub content_source_url: Option<String>,
pub thumb_media_id: String,
pub url: Option<String>,
pub thumb_url: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct DraftListResponse {
pub total_count: i32,
pub item_count: i32,
pub item: Vec<DraftItem>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct DraftCountResponse {
pub total_count: i32,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PublishSubmitResponse {
pub publish_id: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PublishStatusResponse {
pub publish_id: String,
pub publish_status: i32,
pub article_id: Option<String>,
pub article_detail: Option<PublishArticleDetail>,
pub fail_idx: Option<Vec<i32>>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PublishArticleDetail {
pub count: i32,
pub item: Vec<PublishArticleItem>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PublishArticleItem {
pub idx: i32,
pub article_url: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PublishListResponse {
pub total_count: i32,
pub item_count: i32,
pub item: Vec<PublishItem>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PublishItem {
pub article_id: String,
pub content: PublishContent,
pub update_time: i64,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PublishContent {
pub news_item: Vec<PublishNewsItem>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct PublishNewsItem {
pub title: String,
pub author: Option<String>,
pub digest: Option<String>,
pub content: String,
pub content_source_url: Option<String>,
pub thumb_media_id: String,
pub url: String,
pub thumb_url: Option<String>,
pub is_deleted: Option<bool>,
}
#[derive(Debug, Clone, Serialize)]
pub struct MassFilter {
pub is_to_all: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag_id: Option<i32>,
}
#[derive(Debug, Clone, Serialize)]
pub struct MassSendRequest {
pub filter: MassFilter,
pub mpnews: MassMediaId,
pub msgtype: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub send_ignore_reprint: Option<i32>,
}
#[derive(Debug, Clone, Serialize)]
pub struct MassMediaId {
pub media_id: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct MassSendResponse {
pub msg_id: i64,
pub msg_data_id: Option<i64>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct MassStatusResponse {
pub msg_id: i64,
pub msg_status: String,
}