#![forbid(unsafe_code)]
#![forbid(missing_docs)]
use std::{path::PathBuf, io::stdout};
use clap::{crate_version, crate_authors, Clap, AppSettings};
use anyhow::Result;
use mif::{First, cli::{open, dump, load, join}};
use Mif::{Dump, Join};
#[derive(Clap)]
#[clap(
version = crate_version!(),
author = crate_authors!(),
max_term_width = 80,
global_setting = AppSettings::ColoredHelp,
global_setting = AppSettings::DeriveDisplayOrder,
global_setting = AppSettings::UnifiedHelpMessage,
global_setting = AppSettings::ArgRequiredElseHelp,
)]
enum Mif {
Dump {
#[clap(default_value = "-")]
input: PathBuf,
#[clap(short = "w", long = "width", value_name = "bits")]
#[clap(default_value = "16")]
width: usize,
#[clap(short = "f", long = "first", value_name = "lsb|msb")]
#[clap(default_value = "lsb")]
first: First,
},
Join {
#[clap(default_value = "-")]
toml: PathBuf,
#[clap(short = "i", long = "bins", value_name = "path")]
bins: Option<PathBuf>, #[clap(short = "o", long = "mifs", value_name = "path")]
mifs: Option<PathBuf>, #[clap(short = "n", long = "no-comments")]
nocs: bool,
},
}
fn main() -> Result<()> {
match Mif::parse() {
Dump { input, width, first } => {
let (mut bytes, count) = open(&input)?;
dump(&mut stdout(), &mut bytes, count, width, first)
},
Join { toml, bins, mifs, nocs } => {
let bins = bins.unwrap_or_default();
let mifs = mifs.unwrap_or_default();
join(&load(&toml)?, (&bins, &mifs), !nocs)
},
}
}