diff options
Diffstat (limited to 'src')
-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 |
5 files changed, 60 insertions, 0 deletions
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; |