use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Crypto {
pub name: String,
pub ticker: String,
pub slug: String,
pub website_url: String,
pub brand_color: String,
pub market_cap_rank: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Whitepaper {
pub crypto: Crypto,
pub title: String,
pub authors: Vec<String>,
pub year: i32,
#[serde(rename = "abstract")]
pub abstract_text: String,
pub total_sections: i32,
pub available_languages: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Section {
pub order: i32,
pub section_number: String,
pub heading_level: i32,
#[serde(alias = "heading")]
pub heading_text: String,
pub content: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WhitepaperDetail {
pub crypto: Crypto,
pub title: String,
pub authors: Vec<String>,
pub year: i32,
#[serde(rename = "abstract")]
pub abstract_text: String,
pub source_url: String,
pub total_sections: i32,
pub available_languages: Vec<String>,
pub sections: Vec<Section>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TocEntry {
pub order: i32,
pub section_number: String,
pub heading_level: i32,
pub anchor_id: String,
pub heading_en: String,
pub heading: String,
pub translated: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TocResponse {
pub slug: String,
pub toc: Vec<TocEntry>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LanguageCoverage {
pub language: String,
pub translated_sections: i32,
pub total_sections: i32,
pub completion_percent: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Coverage {
pub slug: String,
pub total_sections: i32,
pub languages: Vec<LanguageCoverage>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GlossaryTerm {
pub term: String,
pub slug: String,
pub category: String,
pub aliases: Vec<String>,
pub definition: String,
pub definition_html: String,
pub occurrence_count: i32,
pub translated_term: Option<String>,
pub translated_definition: Option<String>,
pub translated_definition_html: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchResult {
pub slug: String,
pub crypto: String,
pub section_order: i32,
pub anchor_id: String,
pub language: String,
pub heading: String,
pub snippet: String,
pub url: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchResponse {
pub query: String,
pub language: String,
pub count: i32,
pub results: Vec<SearchResult>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StatsTotals {
pub active_cryptocurrencies: i32,
pub whitepapers: i32,
pub sections: i32,
pub translations: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WhitepaperStats {
pub slug: String,
pub ticker: String,
pub total_sections: i32,
pub languages: Vec<serde_json::Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Stats {
pub totals: StatsTotals,
pub supported_languages: Vec<String>,
pub by_slug: Vec<WhitepaperStats>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Language {
pub code: String,
pub name: String,
pub native_name: String,
pub direction: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LanguagesResponse {
pub count: i32,
pub results: Vec<Language>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphNode {
pub id: String,
pub label: String,
#[serde(rename = "type")]
pub node_type: String,
pub slug: String,
pub ticker: String,
pub color: String,
pub year: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphEdge {
pub source: String,
pub target: String,
#[serde(rename = "type")]
pub edge_type: String,
#[serde(default = "default_weight")]
pub weight: f64,
}
fn default_weight() -> f64 {
1.0
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct GraphData {
pub nodes: Vec<GraphNode>,
pub edges: Vec<GraphEdge>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PaginatedResponse<T> {
pub count: i32,
pub next: Option<String>,
pub previous: Option<String>,
pub results: Vec<T>,
}