summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml15
-rw-r--r--src/bin/contractor.rs21
-rw-r--r--src/cmd/dump.rs10
-rw-r--r--src/cmd/mod.rs2
-rw-r--r--src/config.rs23
-rw-r--r--src/lib.rs4
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;