use crate::types::{event::HasEvents, Event};
#[cfg(feature = "json")]
use serde::{Deserialize, Serialize};
type Xref = String;
#[derive(Debug)]
#[cfg_attr(feature = "json", derive(Serialize, Deserialize))]
pub struct Family {
pub xref: Option<Xref>,
pub individual1: Option<Xref>, pub individual2: Option<Xref>, pub children: Vec<Xref>,
pub num_children: Option<u8>,
events: Vec<Event>,
}
impl Family {
#[must_use]
pub fn new(xref: Option<Xref>) -> Family {
Family {
xref,
individual1: None,
individual2: None,
children: Vec::new(),
num_children: None,
events: Vec::new(),
}
}
pub fn set_individual1(&mut self, xref: Xref) {
match self.individual1 {
Some(_) => panic!("First individual of family already exists."),
None => self.individual1 = Some(xref),
};
}
pub fn set_individual2(&mut self, xref: Xref) {
match self.individual2 {
Some(_) => panic!("Second individual of family already exists."),
None => self.individual2 = Some(xref),
};
}
pub fn add_child(&mut self, xref: Xref) {
self.children.push(xref);
}
}
impl HasEvents for Family {
fn add_event(&mut self, event: Event) -> () {
let event_type = &event.event;
for e in &self.events {
if &e.event == event_type {
panic!("Family already has a {:?} event", e.event);
}
}
self.events.push(event);
}
fn events(&self) -> Vec<Event> {
self.events.clone()
}
}