Skip to content

Commit dd4a9dc

Browse files
committed
feat: Implement CLI with clap and optimize binary size
1 parent 588f128 commit dd4a9dc

File tree

5 files changed

+347
-95
lines changed

5 files changed

+347
-95
lines changed

Cargo.lock

Lines changed: 210 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ hex = "0.4.3"
99
base64 = "0.20"
1010
base32 = "0.4"
1111
regex = "1.6"
12-
atty = "0.2"
12+
atty = "0.2.14"
13+
clap = { version = "4.5.4", features = ["derive"] }
1314
lazy_static = "1.4"
1415
urlencoding = "2.1.3"
1516
ureq = "1.3"
@@ -21,3 +22,4 @@ opt-level = "z"
2122
strip = true
2223
lto = true
2324
codegen-units = 1
25+
panic = "abort"

src/cli.rs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
use clap::{Parser, Subcommand};
2+
3+
#[derive(Parser)]
4+
#[command(author, version, about, long_about = None)]
5+
pub struct Cli {
6+
#[command(subcommand)]
7+
pub command: Subcommands,
8+
}
9+
10+
#[derive(Subcommand)]
11+
pub enum Subcommands {
12+
/// Caesar cipher
13+
#[clap(aliases = &["ceasar", "c"])]
14+
Caesar { text: String },
15+
/// Rot13 cipher
16+
#[clap(alias = "rot")]
17+
Rot13 { text: String },
18+
/// Vigenere cipher
19+
#[clap(alias = "vig")]
20+
Vigenere { text: String, key: String },
21+
/// Morse code
22+
Morse { text: String },
23+
/// XOR hex with hex
24+
Hxh { hex1: String, hex2: String },
25+
/// XOR string with string
26+
Sxs { str1: String, str2: String },
27+
/// XOR string with byte
28+
#[clap(alias = "bxs")]
29+
Sxb { text: String },
30+
/// XOR hex with byte
31+
#[clap(alias = "bxh")]
32+
Hxb { text: String },
33+
/// Base64 encoding/decoding
34+
B64 { text: String },
35+
/// Base32 encoding/decoding
36+
B32 { text: String },
37+
/// Octal encoding/decoding
38+
#[clap(alias = "oct")]
39+
Octal { text: String },
40+
/// Hexadecimal encoding/decoding
41+
#[clap(aliases = &["hexa", "b16"])]
42+
Hex { text: String },
43+
/// Binary encoding/decoding
44+
#[clap(alias = "bin")]
45+
Binary { text: String },
46+
/// Convert to lowercase
47+
Lower { text: String },
48+
/// Convert to uppercase
49+
Upper { text: String },
50+
/// Remove whitespace
51+
#[clap(alias = "rw")]
52+
RemoveWhitespace { text: String },
53+
/// Reverse text
54+
#[clap(alias = "rev")]
55+
Reverse { text: String },
56+
/// Get text length
57+
#[clap(alias = "len")]
58+
Length { text: String },
59+
/// A1Z26 cipher
60+
#[clap(alias = "az")]
61+
A1z26 { text: String },
62+
/// Atbash cipher
63+
Atbash { text: String },
64+
/// ASCII encoding/decoding
65+
Ascii { text: String },
66+
/// Baconian cipher
67+
Bacon { text: String },
68+
/// Extract emails
69+
#[clap(aliases = &["emails", "mails", "mail"])]
70+
Email { text: String },
71+
/// Extract phone numbers
72+
#[clap(aliases = &["phones", "mobile", "number"])]
73+
Phone { text: String },
74+
/// Extract IPv4 addresses
75+
#[clap(aliases = &["ip", "ips"])]
76+
Ipv4 { text: String },
77+
/// DNA encoding/decoding
78+
#[clap(alias = "dna")]
79+
Dna { text: String },
80+
/// Playfair cipher
81+
#[clap(alias = "pf")]
82+
Playfair { text: String, key: String },
83+
/// Railfence cipher
84+
Railfence { text: String },
85+
/// URL encode
86+
#[clap(aliases = &["ue", "urlenc", "urlencode"])]
87+
Urle { text: String },
88+
/// URL decode
89+
#[clap(aliases = &["ud", "urldec", "urldecode"])]
90+
Urld { text: String },
91+
/// FactorDB lookup
92+
#[clap(aliases = &["factor", "factordb"])]
93+
Fdb { number: String },
94+
}

0 commit comments

Comments
 (0)