use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
pub type Extra = BTreeMap<String, Value>;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct NameComponent {
#[serde(rename = "type")]
pub kind: String,
pub value: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub value_latin: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reading: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reading_system: Option<String>,
#[serde(default)]
pub order: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub derived_from: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub derivation_type: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct AxgfName {
pub display: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub display_latin: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub culture: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub direction: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub display_order: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reading: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reading_system: Option<String>,
#[serde(default)]
pub components: Vec<NameComponent>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct AxgfDateRange {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub earliest: Option<Box<AxgfDate>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub latest: Option<Box<AxgfDate>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub note: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct AxgfDateAlternative {
pub value: String,
pub calendar: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub era: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub era_year: Option<i32>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct AxgfDate {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub value: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub calendar: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub precision: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub circa: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub confidence: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub note: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub alternatives: Vec<AxgfDateAlternative>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub range: Option<AxgfDateRange>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EntityRef {
pub entity_type: String,
pub entity_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub confidence: Option<f64>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DocumentLink {
pub document_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub role: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub note: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub date: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AiHypothesis {
pub id: String,
pub claim: String,
pub confidence: f64,
pub status: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub evidence: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reviewed_at: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reviewed_by: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct BaseEntity {
pub id: String,
#[serde(rename = "type")]
pub kind: String,
pub axgf_version: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub version_num: Option<u32>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub created_by: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub tags: Vec<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub extensions: Option<Value>,
}