1use clap::{Parser, Subcommand};
2use std::io::BufRead;
3
4#[derive(Debug, Parser)]
5#[command(version, about)]
6pub struct Args {
7 #[command(subcommand)]
8 pub command: Option<SubCommands>,
9 #[arg(short, long)]
11 pub base: Option<u8>,
12}
13
14#[derive(Subcommand, Debug)]
15pub enum SubCommands {
16 Table {
18 #[arg(short, long, default_value_t = 16)]
20 base: u8,
21 },
22 ToChar {
23 #[clap(num_args = 1.., value_delimiter = ' ')]
25 number: Option<Vec<String>>,
26 #[arg(short, long, default_value_t = 16)]
28 base: u8,
29 #[arg(short, long)]
32 ignore_specials: bool,
33 },
34 ToNum {
35 #[clap(num_args = 1.., value_delimiter = ' ')]
37 char: Option<Vec<String>>,
38 #[arg(short, long, default_value_t = 16)]
40 base: u8,
41 },
42 WhatIs {
43 character: Option<String>,
46 #[arg(short, long, default_value_t = 16)]
48 base: u8,
49 #[arg(short, long)]
51 special: bool,
52 },
53}
54
55impl Default for SubCommands {
56 fn default() -> Self {
57 Self::Table { base: 16 }
58 }
59}
60
61pub fn get_std_in() -> String {
62 std::io::stdin()
63 .lock()
64 .lines()
65 .fold("".to_string(), |acc, line| {
66 acc + &line.unwrap_or_default() + "\n"
67 })
68}