use serde::{Deserialize, Serialize};
use crate::types::{DocumentationRef, ExperimenterRef, Id};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Experimenter {
pub id: Id,
#[serde(rename = "firstName")]
pub first_name: String,
#[serde(rename = "lastName")]
pub last_name: String,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub email: Option<String>,
#[serde(rename = "labName", skip_serializing_if = "Option::is_none", default)]
pub lab_name: Option<String>,
#[serde(
rename = "labAddress",
skip_serializing_if = "Option::is_none",
default
)]
pub lab_address: Option<String>,
}
impl Experimenter {
pub fn new(id: Id, first_name: impl Into<String>, last_name: impl Into<String>) -> Self {
Self {
id,
first_name: first_name.into(),
last_name: last_name.into(),
email: None,
lab_name: None,
lab_address: None,
}
}
#[must_use]
pub fn reference(&self) -> ExperimenterRef {
self.id.clone().into()
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Documentation {
pub id: Id,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub text: Option<String>,
}
impl Documentation {
#[must_use]
pub fn new(id: Id) -> Self {
Self { id, text: None }
}
#[must_use]
pub fn reference(&self) -> DocumentationRef {
self.id.clone().into()
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct RdmlId {
pub publisher: String,
#[serde(rename = "serialNumber")]
pub serial_number: String,
#[serde(rename = "MD5Hash", skip_serializing_if = "Option::is_none", default)]
pub md5_hash: Option<String>,
}
impl RdmlId {
pub fn new(publisher: impl Into<String>, serial_number: impl Into<String>) -> Self {
Self {
publisher: publisher.into(),
serial_number: serial_number.into(),
md5_hash: None,
}
}
}