diff options
-rw-r--r-- | Cargo.toml | 15 | ||||
-rw-r--r-- | src/bin/contractor.rs | 21 | ||||
-rw-r--r-- | src/cmd/dump.rs | 10 | ||||
-rw-r--r-- | src/cmd/mod.rs | 2 | ||||
-rw-r--r-- | src/config.rs | 23 | ||||
-rw-r--r-- | src/lib.rs | 4 |
6 files changed, 75 insertions, 0 deletions
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 <liw@liw.fi>"] +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<PathBuf>, + pub ansible: serde_yaml::Value, + pub build: String, +} + +impl Config { + pub fn read(filename: &Path) -> anyhow::Result<Self> { + 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; |