use serde::{Deserialize, Serialize};
use super::common::{AxgfDate, BaseEntity, Extra};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Repository {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub location: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub reference: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SourceConflict {
pub source_id: String,
pub field: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub this_value: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub conflict_value: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resolution: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub resolution_note: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct DnaMatch {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub person_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub shared_cm: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub shared_percent: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub predicted_relationship: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub confidence: Option<f64>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct Dna {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub test_provider: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub test_type: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub test_date: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub kit_id: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[serde(rename = "match")]
pub match_: Option<DnaMatch>,
#[serde(flatten)]
pub extra: Extra,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Source {
#[serde(flatten)]
pub base: BaseEntity,
pub title: String,
pub source_type: String,
pub reliability: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub confidence: Option<f64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub repository: Option<Repository>,
#[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 document_id: Option<String>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub conflicts: Vec<SourceConflict>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub transcription: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub language: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub script: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub dna: Option<Dna>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub note: Option<String>,
#[serde(flatten)]
pub extra: Extra,
}