use serde::{Deserialize, Serialize};
use serde_yaml::Value;
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub struct Config {
pub listeners: Vec<ListenerAndTargetConfig>,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub struct ListenerAndTargetConfig {
#[serde(flatten)]
pub target: TargetConfig,
#[serde(flatten)]
pub listener: Value,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub struct TargetConfig {
#[serde(flatten)]
pub service: Value,
#[serde(default)]
pub layers: Vec<Value>,
}
fn usage(program: &str) -> ! {
eprintln!("usage: {} <CONFIG>", program);
std::process::exit(1)
}
pub fn path_from_args() -> String {
let mut args = std::env::args();
let program = args.next().unwrap();
let config_path = match args.next() {
Some(v) => v,
_ => usage(&program),
};
if args.next().is_some() {
usage(&program);
}
config_path
}