summaryrefslogtreecommitdiff
path: root/src/bin/obnam-benchmark.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/obnam-benchmark.rs')
-rw-r--r--src/bin/obnam-benchmark.rs33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/bin/obnam-benchmark.rs b/src/bin/obnam-benchmark.rs
index 617a0a3..5d4f06a 100644
--- a/src/bin/obnam-benchmark.rs
+++ b/src/bin/obnam-benchmark.rs
@@ -6,6 +6,17 @@ use structopt::StructOpt;
#[derive(Debug, StructOpt)]
struct Opt {
+ #[structopt(subcommand)]
+ cmd: Command,
+}
+
+#[derive(Debug, StructOpt)]
+enum Command {
+ Spec(Spec),
+}
+
+#[derive(Debug, StructOpt)]
+struct Spec {
#[structopt(parse(from_os_str))]
spec: PathBuf,
@@ -23,13 +34,21 @@ fn main() {
fn real_main() -> anyhow::Result<()> {
let opt = Opt::from_args();
- println!("reading {}", opt.spec.display());
- let input = File::open(&opt.spec)?;
- let spec: Specification = serde_yaml::from_reader(&input)?;
-
- println!("writing {}", opt.output.display());
- let output = File::create(&opt.output)?;
- serde_json::to_writer(&output, &spec)?;
+ match opt.cmd {
+ Command::Spec(x) => x.run()?,
+ }
Ok(())
}
+
+impl Spec {
+ fn run(&self) -> anyhow::Result<()> {
+ let input = File::open(&self.spec)?;
+ let spec: Specification = serde_yaml::from_reader(&input)?;
+
+ let output = File::create(&self.output)?;
+ serde_json::to_writer(&output, &spec)?;
+
+ Ok(())
+ }
+}