use clap::{Parser, Subcommand};
use tracing_subscriber::{filter::LevelFilter, fmt, prelude::*, EnvFilter};
mod cat;
use crate::cat::CatOpts;
mod view;
use crate::view::ViewOpts;
mod split;
use crate::split::SplitOpts;
#[derive(Debug, Parser)]
#[command(author, version, about)]
#[command(propagate_version = true)]
pub struct Cli {
#[command(subcommand)]
command: Commands,
}
#[derive(Debug, Subcommand)]
pub enum Commands {
Cat(CatOpts),
View(ViewOpts),
Split(SplitOpts),
}
fn main() -> anyhow::Result<()> {
tracing_subscriber::registry()
.with(fmt::layer().with_writer(std::io::stderr))
.with(
EnvFilter::builder()
.with_default_directive(LevelFilter::INFO.into())
.from_env_lossy(),
)
.init();
let args = Cli::parse();
match args.command {
Commands::Cat(cat_opts) => cat::cat(&cat_opts)?,
Commands::View(view_opts) => view::view(&view_opts)?,
Commands::Split(split_opts) => split::split(&split_opts)?,
}
Ok(())
}