Initial commit

This commit is contained in:
Lncvrt committed 2026-10-11 13:03:49 -07:00
commit f17172ee0d
3 files changed
+66

No files matched your search

+2
View File
@@ -0,0 +1,2 @@
/target
/Cargo.lock
+8
View File
@@ -0,0 +1,8 @@
[package]
name = "password-generator"
version = "1.0.0"
edition = "2024"
[dependencies]
rand = "0.10.3"
clap = { version = "4.6.7", features = ["derive"] }
+56
View File
@@ -0,0 +1,56 @@
use rand::RngExt;
use clap::Parser;
pub fn generate_password(
length: usize,
use_upper: bool,
use_lower: bool,
use_numbers: bool,
use_symbols: bool,
) -> String {
let mut pool = String::new();
if use_upper { pool.push_str("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); }
if use_lower { pool.push_str("abcdefghijklmnopqrstuvwxyz"); }
if use_numbers { pool.push_str("0123456789"); }
if use_symbols { pool.push_str("!@#$%^&*"); }
if pool.is_empty() {
return String::new();
}
let mut rng = rand::rng();
let chars_vec: Vec<char> = pool.chars().collect();
(0..length)
.map(|_| {
let idx = rng.random_range(0..chars_vec.len());
chars_vec[idx]
})
.collect()
}
#[derive(Parser, Debug)]
#[command(author = "Lncvrt", version, about = "A simple password generator CLI. To disable the use of uppercases or other stuff do \"--uppercase\"", long_about = None)]
struct Args {
#[arg(short, long, default_value_t = 8)]
length: usize,
#[arg(short, long, default_value_t = true, action = clap::ArgAction::SetFalse)]
uppercase: bool,
#[arg(short, long, default_value_t = true, action = clap::ArgAction::SetFalse)]
lowercase: bool,
#[arg(short, long, default_value_t = true, action = clap::ArgAction::SetFalse)]
numbers: bool,
#[arg(short, long, default_value_t = true, action = clap::ArgAction::SetFalse)]
symbols: bool,
}
fn main() {
let args = Args::parse();
println!("Length: {}, Uppercase: {}, Lowercase: {}, Numbers: {}, Symbols: {}", args.length, args.uppercase, args.lowercase, args.numbers, args.symbols);
println!("Generated Password: {}", generate_password(args.length, args.uppercase, args.lowercase, args.numbers, args.symbols))
}