use serde::{Deserialize, Serialize};
use super::common::{AxgfDate, BaseEntity, DocumentLink, Extra};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UnionPerson {
pub person_id: String,
pub role: String,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct UnionStart {
#[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 event_id: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct UnionEnd {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub date: Option<AxgfDate>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reason: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub note: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Union {
#[serde(rename = "type")]
pub kind: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
pub persons: Vec<UnionPerson>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub start: Option<UnionStart>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub end: Option<UnionEnd>,
#[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(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FamilyChild {
pub person_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub birth_order: Option<i32>,
#[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(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct FamilyAi {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub vault_page: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Family {
#[serde(flatten)]
pub base: BaseEntity,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub union: Union,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub children: Vec<FamilyChild>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub documents: Vec<DocumentLink>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub notes: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub ai: Option<FamilyAi>,
#[serde(flatten)]
pub extra: Extra,
}