Minor opts

This commit is contained in:
surya 2023-10-07 23:19:49 +05:30
parent dc87816baf
commit 1da9d1ac68
3 changed files with 222 additions and 31 deletions

188
Cargo.lock generated
View File

@ -2,16 +2,111 @@
# It is not intended for manual editing. # It is not intended for manual editing.
version = 3 version = 3
[[package]]
name = "anstream"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
dependencies = [
"anstyle",
"anstyle-parse",
"anstyle-query",
"anstyle-wincon",
"colorchoice",
"utf8parse",
]
[[package]]
name = "anstyle"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
[[package]]
name = "anstyle-parse"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
dependencies = [
"utf8parse",
]
[[package]]
name = "anstyle-query"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
dependencies = [
"windows-sys",
]
[[package]]
name = "anstyle-wincon"
version = "3.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
dependencies = [
"anstyle",
"windows-sys",
]
[[package]] [[package]]
name = "bytecount" name = "bytecount"
version = "0.6.3" version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c" checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c"
[[package]]
name = "clap"
version = "4.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956"
dependencies = [
"clap_builder",
"clap_derive",
]
[[package]]
name = "clap_builder"
version = "4.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45"
dependencies = [
"anstream",
"anstyle",
"clap_lex",
"strsim",
]
[[package]]
name = "clap_derive"
version = "4.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873"
dependencies = [
"heck",
"proc-macro2",
"quote",
"syn 2.0.38",
]
[[package]]
name = "clap_lex"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"
[[package]]
name = "colorchoice"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]] [[package]]
name = "enc" name = "enc"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"clap",
"tabled", "tabled",
] ]
@ -47,7 +142,7 @@ dependencies = [
"proc-macro-error-attr", "proc-macro-error-attr",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn", "syn 1.0.109",
"version_check", "version_check",
] ]
@ -80,6 +175,12 @@ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]]
name = "strsim"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.109" version = "1.0.109"
@ -91,6 +192,17 @@ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]]
name = "syn"
version = "2.0.38"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]] [[package]]
name = "tabled" name = "tabled"
version = "0.14.0" version = "0.14.0"
@ -112,7 +224,7 @@ dependencies = [
"proc-macro-error", "proc-macro-error",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn", "syn 1.0.109",
] ]
[[package]] [[package]]
@ -127,8 +239,80 @@ version = "0.1.11"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
[[package]]
name = "utf8parse"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
[[package]] [[package]]
name = "version_check" name = "version_check"
version = "0.9.4" version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "windows-sys"
version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
dependencies = [
"windows-targets",
]
[[package]]
name = "windows-targets"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
dependencies = [
"windows_aarch64_gnullvm",
"windows_aarch64_msvc",
"windows_i686_gnu",
"windows_i686_msvc",
"windows_x86_64_gnu",
"windows_x86_64_gnullvm",
"windows_x86_64_msvc",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
[[package]]
name = "windows_aarch64_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
[[package]]
name = "windows_i686_gnu"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
[[package]]
name = "windows_i686_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
[[package]]
name = "windows_x86_64_gnu"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
[[package]]
name = "windows_x86_64_msvc"
version = "0.48.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"

View File

@ -6,4 +6,5 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
clap = { version = "4.4.6", features = ["derive"] }
tabled = "0.14.0" tabled = "0.14.0"

View File

@ -1,10 +1,18 @@
use std::env; use clap::Parser;
use tabled::{ use tabled::{
builder::Builder, builder::Builder,
settings::{Modify, object::Rows, Alignment, Style} settings::{Modify, object::Rows, Alignment, Style}
}; };
#[derive(Parser)]
struct CliArgs {
name: String,
#[arg(short = 'j', long = "json", action)]
json: bool,
}
struct StringDetail { struct StringDetail {
characters: Vec<CharacterDetail>, characters: Vec<CharacterDetail>,
len: usize, len: usize,
@ -12,7 +20,6 @@ struct StringDetail {
struct CharacterDetail { struct CharacterDetail {
character: Option<char>, character: Option<char>,
unicode: Option<u32>,
byte_index: usize, byte_index: usize,
byte: u8, byte: u8,
} }
@ -37,12 +44,10 @@ impl StringDetail{
Self { characters: Vec::new(), len: 0 } Self { characters: Vec::new(), len: 0 }
} }
fn push(&mut self, character:Option<char>, byte:u8){ fn push(&mut self, character:Option<char>, byte:u8){ self.characters
self.characters
.push(CharacterDetail { .push(CharacterDetail {
byte_index: self.len, byte_index: self.len,
character, character,
unicode: character.map(|c| c as u32),
byte, byte,
}); });
self.len += 1; self.len += 1;
@ -69,29 +74,32 @@ impl StringDetail{
} }
fn to_table_row(char_detail: &CharacterDetail) -> Vec<String> { fn to_table_row(char_detail: &CharacterDetail) -> Vec<String> {
let character: String = match char_detail.character { let empty = "<->";
Some(x) => String::from(format!("{}", x)), let mut character = String::from(empty);
None => String::from("<->"), let mut unicode = String::from(empty);
}; let mut unicode_hex = String::from(empty);
match char_detail.character {
let unicode: String = match char_detail.unicode { Some(x) => {
Some(x) => String::from(format!("{}", x)), character = String::from(format!("{}", x));
None => String::from("<->"), unicode = String::from(format!("{}", x as u32));
}; unicode_hex = String::from(format!("{:x}", x as u32));
}
let unicode_hex: String = match char_detail.unicode { None => {
Some(x) => String::from(format!("{:x}", x)), }
None => String::from("<->"),
}; };
let byte = format!("{}", char_detail.byte_index);
let hex = format!("{:02x}", char_detail.byte);
let dec = format!("{}", char_detail.byte);
let bin = format!("{:08b}", char_detail.byte);
vec![ vec![
unicode, unicode,
unicode_hex, unicode_hex,
character, character,
format!("{}", char_detail.byte_index), byte,
format!("{:02x}", char_detail.byte), hex,
format!("{}", char_detail.byte), dec,
format!("{:08b}", char_detail.byte)] bin]
} }
fn table_header() -> Vec<String> { fn table_header() -> Vec<String> {
@ -109,12 +117,10 @@ impl StringDetail{
} }
fn main() { fn main() {
let args: Vec<String> = env::args().collect(); let cli = CliArgs::parse();
if args.len() < 2 { let utf8 = StringDetail::parse_utf8(&cli.name);
print!("Usage: enc <string>"); match cli.json {
return; false => utf8.print_table(),
_ => panic!("Not yet implemented!!"),
} }
let utf8 = StringDetail::parse_utf8(&args[1]);
utf8.print_table();
} }