use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
#[derive(Debug, Serialize, Deserialize)]
pub struct PostGetRequest {
pub post_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id_type: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Post {
#[serde(skip_serializing_if = "Option::is_none")]
pub post_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub author_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub author_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub media_list: Option<Vec<PostMedia>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub create_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub update_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub visibility: Option<PostVisibility>,
#[serde(skip_serializing_if = "Option::is_none")]
pub statistics: Option<PostStatistics>,
#[serde(skip_serializing_if = "Option::is_none")]
pub extra: Option<HashMap<String, Value>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PostMedia {
#[serde(skip_serializing_if = "Option::is_none")]
pub media_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub media_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub media_key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub thumbnail_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_size: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_name: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PostVisibility {
#[serde(skip_serializing_if = "Option::is_none")]
pub visibility_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub visible_user_ids: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub visible_department_ids: Option<Vec<String>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PostStatistics {
#[serde(skip_serializing_if = "Option::is_none")]
pub comment_count: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub like_count: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub view_count: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub share_count: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reaction_stats: Option<HashMap<String, i64>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Comment {
#[serde(skip_serializing_if = "Option::is_none")]
pub comment_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub post_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub author_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub author_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub content_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub parent_comment_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reply_to_user_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub create_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub update_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub media_list: Option<Vec<PostMedia>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct Reaction {
#[serde(skip_serializing_if = "Option::is_none")]
pub reaction_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub post_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub comment_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reaction_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub emoji: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub create_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PostEvent {
#[serde(skip_serializing_if = "Option::is_none")]
pub event_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub post: Option<Post>,
#[serde(skip_serializing_if = "Option::is_none")]
pub event_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub operator_id: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct CommentEvent {
#[serde(skip_serializing_if = "Option::is_none")]
pub event_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub comment: Option<Comment>,
#[serde(skip_serializing_if = "Option::is_none")]
pub event_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub operator_id: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ReactionEvent {
#[serde(skip_serializing_if = "Option::is_none")]
pub event_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reaction: Option<Reaction>,
#[serde(skip_serializing_if = "Option::is_none")]
pub event_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub operator_id: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PostStatisticsEvent {
#[serde(skip_serializing_if = "Option::is_none")]
pub event_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub post_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub statistics: Option<PostStatistics>,
#[serde(skip_serializing_if = "Option::is_none")]
pub changes: Option<StatisticsChanges>,
#[serde(skip_serializing_if = "Option::is_none")]
pub event_time: Option<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct StatisticsChanges {
#[serde(skip_serializing_if = "Option::is_none")]
pub comment_count_change: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub like_count_change: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub view_count_change: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub share_count_change: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub reaction_changes: Option<HashMap<String, i64>>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ContentFormatRequest {
pub content: String,
pub from_format: String,
pub to_format: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ContentFormatResponse {
#[serde(skip_serializing_if = "Option::is_none")]
pub content: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub format_type: Option<String>,
}