use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PageResponse<T> {
pub items: Vec<T>,
#[serde(skip_serializing_if = "Option::is_none")]
pub page_token: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub has_more: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum DraftStatus {
Draft,
Published,
Rejected,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Draft {
pub draft_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub entity_id: Option<String>,
pub main_keys: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aliases: Option<Vec<String>>,
pub description: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub classification_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub outer_info: Option<OuterInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub related_meta: Option<RelatedMeta>,
#[serde(skip_serializing_if = "Option::is_none")]
pub statistics: Option<Statistics>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<DraftStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub creator: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Entity {
pub id: String,
pub main_keys: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub aliases: Option<Vec<String>>,
pub description: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub classification_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub outer_info: Option<OuterInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
pub related_meta: Option<RelatedMeta>,
#[serde(skip_serializing_if = "Option::is_none")]
pub statistics: Option<Statistics>,
#[serde(skip_serializing_if = "Option::is_none")]
pub repo_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub creator: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OuterInfo {
pub provider: String,
pub outer_url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RelatedMeta {
#[serde(skip_serializing_if = "Option::is_none")]
pub users: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub chats: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub docs: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub oncalls: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub links: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub abbreviations: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub classifications: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub images: Option<Vec<String>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Statistics {
#[serde(skip_serializing_if = "Option::is_none")]
pub like_count: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dislike_count: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Classification {
pub id: String,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub father_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Repo {
pub id: String,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub repo_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub creator: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EntitySearchResult {
pub entity: Entity,
#[serde(skip_serializing_if = "Option::is_none")]
pub matched_keys: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub score: Option<f64>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EntityMatchResult {
pub entity: Entity,
pub matched_word: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub match_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HighlightRange {
pub start: i32,
pub end: i32,
pub entity_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct HighlightResult {
pub text: String,
pub ranges: Vec<HighlightRange>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FileInfo {
pub file_token: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_size: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub uploaded_at: Option<i64>,
}