From b47030b86d7971b8f57deb43576e2036589daf32 Mon Sep 17 00:00:00 2001 From: rvcas Date: Mon, 6 Jun 2022 23:55:01 -0400 Subject: [PATCH] feat: better clap commands --- crates/cli/src/lib.rs | 15 +++++-- crates/cli/src/main.rs | 70 +++++++++++++------------------- crates/uplc/example/integer.uplc | 2 +- 3 files changed, 41 insertions(+), 46 deletions(-) diff --git a/crates/cli/src/lib.rs b/crates/cli/src/lib.rs index e7a6534f..9c3341b3 100644 --- a/crates/cli/src/lib.rs +++ b/crates/cli/src/lib.rs @@ -1,10 +1,19 @@ use std::path::PathBuf; -use clap::Parser; +use clap::{Parser, Subcommand}; #[derive(Parser)] -pub struct Cli { - pub input: PathBuf, +#[clap(author, version, about, long_about = None)] +#[clap(propagate_version = true)] +pub enum Cli { + #[clap(subcommand)] + Uplc(UplcCommand), +} + +#[derive(Subcommand)] +pub enum UplcCommand { + Flat { input: PathBuf }, + Unflat { input: PathBuf }, } impl Default for Cli { diff --git a/crates/cli/src/main.rs b/crates/cli/src/main.rs index ed0a9cc0..80f6a615 100644 --- a/crates/cli/src/main.rs +++ b/crates/cli/src/main.rs @@ -1,59 +1,45 @@ use uplc::{ - ast::{DeBruijn, NamedDeBruijn, Program}, + ast::{DeBruijn, FakeNamedDeBruijn, Program}, parser, }; -use neptune::Cli; +use neptune::{Cli, UplcCommand}; fn main() -> anyhow::Result<()> { let args = Cli::default(); - let code = std::fs::read_to_string(&args.input)?; + match args { + Cli::Uplc(uplc) => match uplc { + UplcCommand::Flat { input } => { + let code = std::fs::read_to_string(&input)?; - let program = parser::program(&code)?; + let program = parser::program(&code)?; - println!("\nName:"); - println!("{:#?}", program); + let program = Program::::try_from(program)?; - let flat_bytes = program.to_flat()?; + let bytes = program.to_flat()?; - print!("\nflat bits:\n"); + for (i, byte) in bytes.iter().enumerate() { + print!("{:08b}", byte); - for byte in flat_bytes { - print!("{:08b} ", byte); + if (i + 1) % 4 == 0 { + println!(); + } else { + print!(" "); + } + } + + println!(); + } + UplcCommand::Unflat { input } => { + let bytes = std::fs::read(&input)?; + + let program = Program::::from_flat(&bytes)?; + + println!("{:#?}", program); + } + }, } - println!(); - - let program_nd: Program = program.try_into()?; - - println!("\nNamed De Bruijn:"); - println!("{:#?}", program_nd); - - let flat_bytes = program_nd.to_flat()?; - - print!("\nflat bits:\n"); - - for byte in flat_bytes { - print!("{:08b} ", byte); - } - - println!(); - - let program_d: Program = program_nd.into(); - - println!("\nDe Bruijn:"); - println!("{:#?}", program_d); - - let flat_bytes = program_d.to_flat()?; - - print!("\nflat bits:\n"); - - for byte in flat_bytes { - print!("{:08b} ", byte); - } - - println!(); - Ok(()) } diff --git a/crates/uplc/example/integer.uplc b/crates/uplc/example/integer.uplc index f72bf9be..4b44183c 100644 --- a/crates/uplc/example/integer.uplc +++ b/crates/uplc/example/integer.uplc @@ -1,7 +1,7 @@ (program 11.22.33 [ ( - lam x (lam x y)) (con string "PT8" + lam x (lam x x)) (con string "PT8" ) ] ) \ No newline at end of file