use crate::sketchbook::ids::DatasetId;
use crate::sketchbook::observations::Observation;
use crate::sketchbook::JsonSerde;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ObservationData {
pub id: String,
pub name: String,
pub annotation: String,
pub dataset: String,
pub values: String,
}
impl<'de> JsonSerde<'de> for ObservationData {}
impl ObservationData {
pub fn new(
obs_id: &str,
name: &str,
annot: &str,
dataset_id: &str,
values: &str,
) -> ObservationData {
ObservationData {
id: obs_id.to_string(),
name: name.to_string(),
annotation: annot.to_string(),
dataset: dataset_id.to_string(),
values: values.to_string(),
}
}
pub fn from_obs(obs: &Observation, dataset_id: &DatasetId) -> ObservationData {
ObservationData::new(
obs.get_id().as_str(),
obs.get_name(),
obs.get_annotation(),
dataset_id.as_str(),
&obs.to_values_string(),
)
}
pub fn to_observation(&self) -> Result<Observation, String> {
Observation::try_from_str_annotated(
&self.values.clone(),
&self.id,
&self.name,
&self.annotation,
)
}
}
#[cfg(test)]
mod tests {
use crate::sketchbook::data_structs::ObservationData;
use crate::sketchbook::ids::DatasetId;
use crate::sketchbook::observations::Observation;
#[test]
fn test_converting() {
let dataset_id = DatasetId::new("d").unwrap();
let obs_before = Observation::try_from_str("0011*", "o").unwrap();
let obs_data = ObservationData::from_obs(&obs_before, &dataset_id);
let obs_after = obs_data.to_observation().unwrap();
assert_eq!(obs_before, obs_after);
}
}