use std::fs;
use std::fs::File;
use std::io;
use std::io::Write;
use std::path::Path;
use std::path::PathBuf;
use serde::Deserialize;
use serde::Serialize;
use super::record_based::features;
use super::record_based::gc_content;
use super::record_based::general;
use super::record_based::quality_scores;
use super::record_based::template_length;
use super::sequence_based::coverage;
use super::sequence_based::edits;
#[derive(Default, Serialize, Deserialize)]
pub struct Results {
pub general: Option<general::metrics::GeneralMetrics>,
pub features: Option<features::Metrics>,
pub gc_content: Option<gc_content::metrics::GCContentMetrics>,
pub template_length: Option<template_length::TemplateLengthFacet>,
pub quality_scores: Option<quality_scores::QualityScoreFacet>,
pub coverage: Option<coverage::CoverageMetrics>,
pub edits: Option<edits::EditMetrics>,
}
impl Results {
pub fn write(&self, output_prefix: String, directory: &Path) -> Result<(), io::Error> {
let features_filename = output_prefix + ".results.json";
let mut features_filepath = PathBuf::from(directory);
features_filepath.push(features_filename);
let mut file = File::create(features_filepath)?;
let output = serde_json::to_string_pretty(&self).unwrap();
file.write_all(output.as_bytes())?;
Ok(())
}
pub fn read(filepath: impl AsRef<Path>) -> anyhow::Result<Results> {
let path = filepath.as_ref();
let contents = fs::read_to_string(path)?;
Ok(serde_json::from_str(&contents)?)
}
}