From f039d822db63d46c772c85f44db36909656ebf05 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 13 Dec 2020 12:47:48 +0200 Subject: feat: add "dump" subcommand --- Cargo.toml | 15 +++++++++++++++ src/bin/contractor.rs | 21 +++++++++++++++++++++ src/cmd/dump.rs | 10 ++++++++++ src/cmd/mod.rs | 2 ++ src/config.rs | 23 +++++++++++++++++++++++ src/lib.rs | 4 ++++ 6 files changed, 75 insertions(+) create mode 100644 Cargo.toml create mode 100644 src/bin/contractor.rs create mode 100644 src/cmd/dump.rs create mode 100644 src/cmd/mod.rs create mode 100644 src/config.rs create mode 100644 src/lib.rs diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..7f316c5 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "contractor" +version = "0.1.0" +authors = ["Lars Wirzenius "] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow = "1" +log = "0.4" +serde_json = "1" +serde = { version = "1", features = ["derive"] } +serde_yaml = "0.8" +structopt = "0.3" diff --git a/src/bin/contractor.rs b/src/bin/contractor.rs new file mode 100644 index 0000000..a8170bb --- /dev/null +++ b/src/bin/contractor.rs @@ -0,0 +1,21 @@ +use contractor::cmd::dump; +use log::trace; +use std::path::PathBuf; +use structopt::StructOpt; + +fn main() -> anyhow::Result<()> { + let opt = Opt::from_args(); + trace!("opt: {:?}", opt); + match opt { + Opt::Dump { filename } => dump(&filename)?, + } + Ok(()) +} + +#[derive(StructOpt, Debug)] +enum Opt { + Dump { + #[structopt(parse(from_os_str))] + filename: PathBuf, + }, +} diff --git a/src/cmd/dump.rs b/src/cmd/dump.rs new file mode 100644 index 0000000..d0a5e7f --- /dev/null +++ b/src/cmd/dump.rs @@ -0,0 +1,10 @@ +use crate::Config; +use log::trace; +use std::path::Path; + +pub fn dump(filename: &Path) -> anyhow::Result<()> { + trace!("dump: filename={:?}", filename); + let config = Config::read(filename)?; + println!("{}", serde_json::to_string(&config)?); + Ok(()) +} diff --git a/src/cmd/mod.rs b/src/cmd/mod.rs new file mode 100644 index 0000000..479ea3e --- /dev/null +++ b/src/cmd/mod.rs @@ -0,0 +1,2 @@ +mod dump; +pub use dump::dump; diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..0c9c35c --- /dev/null +++ b/src/config.rs @@ -0,0 +1,23 @@ +use log::trace; +use serde::{Deserialize, Serialize}; +use std::fs::File; +use std::path::{Path, PathBuf}; + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "kebab-case")] +pub struct Config { + pub worker_image: PathBuf, + pub source: PathBuf, + pub workspace: Option, + pub ansible: serde_yaml::Value, + pub build: String, +} + +impl Config { + pub fn read(filename: &Path) -> anyhow::Result { + trace!("filename={:?}", filename); + let file = File::open(filename)?; + let config: Config = serde_yaml::from_reader(file)?; + Ok(config) + } +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..8ecc22e --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,4 @@ +pub mod cmd; + +mod config; +pub use config::Config; -- cgit v1.2.1