use anyhow::Error;
use argh::FromArgs;
use fehler::throws;
use lambda_build::{
LambdaBuilder, DEFAULT_CONTAINER_CMD, DEFAULT_REPO, DEFAULT_REV,
};
use std::env;
use std::path::PathBuf;
use log::{Level, Metadata, Record};
struct Logger;
impl log::Log for Logger {
fn enabled(&self, metadata: &Metadata) -> bool {
metadata.level() <= Level::Info
}
fn log(&self, record: &Record) {
if self.enabled(record.metadata()) {
println!("{}", record.args());
}
}
fn flush(&self) {}
}
static LOGGER: Logger = Logger;
#[derive(Debug, FromArgs)]
pub struct Opt {
#[argh(option, default = "DEFAULT_REPO.into()")]
repo: String,
#[argh(option, default = "DEFAULT_REV.into()")]
rev: String,
#[argh(option, default = "DEFAULT_CONTAINER_CMD.into()")]
cmd: String,
#[argh(positional, default = "env::current_dir().unwrap()")]
project: PathBuf,
}
#[throws]
fn main() {
log::set_logger(&LOGGER)
.map(|()| log::set_max_level(log::LevelFilter::Info))?;
let opt: Opt = argh::from_env();
let builder = LambdaBuilder {
repo: opt.repo,
rev: opt.rev,
container_cmd: opt.cmd,
project: opt.project,
};
builder.run()?;
}
#[cfg(test)]
mod tests {
use super::*;
use argh::FromArgs;
#[test]
fn test_readme_usage() {
let readme = include_str!("../README.md");
let mut usage = Opt::from_args(&["lambda-build"], &["--help"])
.unwrap_err()
.output;
usage = usage.replace("Usage: ", "");
assert!(readme.contains(&usage));
}
}