use serde::{Deserialize, Serialize};
use super::common::{AiHypothesis, AxgfDate, AxgfName, BaseEntity, DocumentLink, Extra};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Gender {
pub value: String,
#[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 Identity {
pub name: AxgfName,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub names: Vec<AxgfName>,
pub gender: Gender,
pub is_living: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub visibility: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Vital {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub date: Option<AxgfDate>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub place_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub cause: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub confidence: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub source_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub event_id: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct PersonAi {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub vault_page: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub embedding_model: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub embedding_updated_at: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub hypotheses: Vec<AiHypothesis>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Person {
#[serde(flatten)]
pub base: BaseEntity,
pub identity: Identity,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub birth: Option<Vital>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub death: Option<Vital>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub bio: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub notes: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub documents: Vec<DocumentLink>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ai: Option<PersonAi>,
#[serde(flatten)]
pub extra: Extra,
}