diff --git a/src/hyperfine/export/csv.rs b/src/hyperfine/export/csv.rs index ac1bae7..f1be1b8 100644 --- a/src/hyperfine/export/csv.rs +++ b/src/hyperfine/export/csv.rs @@ -1,12 +1,12 @@ -use super::{ExportEntry, ResultExporter}; +use super::{ExportEntry, Exporter}; use csv::WriterBuilder; use std::io::{Error, ErrorKind, Result}; pub struct CsvExporter {} -impl ResultExporter for CsvExporter { - fn write(&self, results: &Vec) -> Result> { +impl Exporter for CsvExporter { + fn serialize(&self, results: &Vec) -> Result> { let mut writer = WriterBuilder::new().from_writer(vec![]); for res in results { writer.serialize(res)?; diff --git a/src/hyperfine/export/json.rs b/src/hyperfine/export/json.rs index f3fc1a1..a3bad56 100644 --- a/src/hyperfine/export/json.rs +++ b/src/hyperfine/export/json.rs @@ -1,4 +1,4 @@ -use super::{ExportEntry, ResultExporter}; +use super::{ExportEntry, Exporter}; use std::io::{Error, ErrorKind, Result}; @@ -11,8 +11,8 @@ struct HyperfineSummary<'a> { pub struct JsonExporter {} -impl ResultExporter for JsonExporter { - fn write(&self, results: &Vec) -> Result> { +impl Exporter for JsonExporter { + fn serialize(&self, results: &Vec) -> Result> { let serialized = to_vec_pretty(&HyperfineSummary { results }); match serialized { diff --git a/src/hyperfine/export/mod.rs b/src/hyperfine/export/mod.rs index 5b56201..88a51ed 100644 --- a/src/hyperfine/export/mod.rs +++ b/src/hyperfine/export/mod.rs @@ -9,28 +9,33 @@ use std::fs::File; use hyperfine::internal::Second; -/// The ExportEntry is the main set of values that will -/// be exported to files when requested. +/// Set of values that will be exported. #[derive(Debug, Default, Clone, Serialize)] pub struct ExportEntry { /// The command that was run command: String, + /// The mean run time mean: Second, + /// The standard deviation of all run times stddev: Second, + /// Time spend in user space user: Second, + /// Time spent in system space system: Second, + /// Min time measured min: Second, + /// Max time measured max: Second, } impl ExportEntry { - /// Create a new ExportEntry with the given values + /// Create a new entry with the given values. pub fn new( command: String, mean: Second, @@ -52,21 +57,20 @@ impl ExportEntry { } } -/// The ResultExportType enum is used to denote the desired form -/// of exporter to use for a given file. +/// The desired form of exporter to use for a given file. #[derive(Clone)] -pub enum ResultExportType { - /// Export to a csv file with the provided name +pub enum ExportType { + /// CSV (comma separated values) format Csv(String), - /// Export to a JSON file + + /// JSON format Json(String), } -/// A ResultExporter is responsible for writing all results to the -/// appropriate file -trait ResultExporter { - /// Write all entries to the target destination - fn write(&self, values: &Vec) -> Result>; +/// Interface for different exporters. +trait Exporter { + /// Export the given entries in the serialized form. + fn serialize(&self, values: &Vec) -> Result>; } /// Create a new ExportManager @@ -79,24 +83,24 @@ pub fn create_export_manager() -> ExportManager { /// The ExportManager handles the management of multiple file /// exporters. pub struct ExportManager { - exporters: Vec, + exporters: Vec, } impl ExportManager { /// Add an additional exporter to the ExportManager - pub fn add_exporter(&mut self, for_type: ResultExportType) { + pub fn add_exporter(&mut self, for_type: ExportType) { self.exporters.push(for_type); } /// Write the given results to all Exporters contained within this manager pub fn write_results(&self, to_write: Vec) -> Result<()> { for exp in &self.exporters { - let (exporter, filename): (Box, &str) = match exp { - &ResultExportType::Csv(ref file) => (Box::from(CsvExporter::new()), file), - &ResultExportType::Json(ref file) => (Box::from(JsonExporter::new()), file), + let (exporter, filename): (Box, &str) = match exp { + &ExportType::Csv(ref file) => (Box::from(CsvExporter::new()), file), + &ExportType::Json(ref file) => (Box::from(JsonExporter::new()), file), }; - let file_content = exporter.write(&to_write)?; + let file_content = exporter.serialize(&to_write)?; write_to_file(filename, file_content)?; } Ok(()) diff --git a/src/main.rs b/src/main.rs index fc65244..01c5c50 100644 --- a/src/main.rs +++ b/src/main.rs @@ -39,7 +39,7 @@ mod hyperfine; use hyperfine::internal::{CmdFailureAction, HyperfineOptions, OutputStyleOption}; use hyperfine::benchmark::{mean_shell_spawning_time, run_benchmark}; -use hyperfine::export::{create_export_manager, ExportEntry, ExportManager, ResultExportType}; +use hyperfine::export::{create_export_manager, ExportEntry, ExportManager, ExportType}; /// Print error message to stderr and terminate pub fn error(message: &str) -> ! { @@ -226,11 +226,11 @@ fn create_exporter(targets: ExportTargetList) -> Option { let mut export_manager = create_export_manager(); if let Some(filename) = targets.json_file { - export_manager.add_exporter(ResultExportType::Json(filename.to_string())); + export_manager.add_exporter(ExportType::Json(filename.to_string())); } if let Some(filename) = targets.csv_file { - export_manager.add_exporter(ResultExportType::Csv(filename.to_string())); + export_manager.add_exporter(ExportType::Csv(filename.to_string())); } Some(export_manager) }