use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::common::Extra;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Generator {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub version: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct FamilyTimeSpan {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub earliest: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub latest: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct FamilyInfo {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub primary_culture: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub primary_place: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub time_span: Option<FamilyTimeSpan>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Stats {
#[serde(default)]
pub persons: u64,
#[serde(default, skip_serializing_if = "is_zero")]
pub families: u64,
#[serde(default, skip_serializing_if = "is_zero")]
pub events: u64,
#[serde(default, skip_serializing_if = "is_zero")]
pub links: u64,
#[serde(default, skip_serializing_if = "is_zero")]
pub occupations: u64,
#[serde(default, skip_serializing_if = "is_zero")]
pub sources: u64,
#[serde(default, skip_serializing_if = "is_zero")]
pub places: u64,
#[serde(default, skip_serializing_if = "is_zero")]
pub documents: u64,
#[serde(flatten)]
pub extra: Extra,
}
fn is_zero(n: &u64) -> bool {
*n == 0
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Privacy {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub contains_living_persons: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub living_persons_redacted: Option<bool>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub gdpr_compliant: Option<bool>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct License {
#[serde(default, skip_serializing_if = "Option::is_none", rename = "type")]
pub kind: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub url: 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 Manifest {
pub axgf: String,
pub created_at: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub generator: Option<Generator>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub family: Option<FamilyInfo>,
pub stats: Stats,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub checksums: Option<Value>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub privacy: Option<Privacy>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub license: Option<License>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub compatibility: Option<Value>,
#[serde(flatten)]
pub extra: Extra,
}