feat: add args parsing to cli client

This commit is contained in:
2026-08-16 20:13:18 +02:00
parent 72e62d4bd7
commit bef5368aec

View File

@@ -1,6 +1,42 @@
use std::io;
use std::{fmt::Display, io};
use checkers::network::client::Client;
use log::{error, info};
const QUIT_COMMAND: &str = "/quit";
const HELP_COMMAND: &str = "/help";
const SEND_COMMAND: &str = "/send";
const READY_COMMAND: &str = "/ready";
enum CliCommands {
Quit,
Help,
Send,
Ready,
}
#[derive(Debug, PartialEq)]
struct UnknownCommandError;
impl Display for UnknownCommandError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "Unknown command!")
}
}
impl TryFrom<&str> for CliCommands {
type Error = UnknownCommandError;
fn try_from(value: &str) -> Result<Self, Self::Error> {
match value {
QUIT_COMMAND => Ok(CliCommands::Quit),
HELP_COMMAND => Ok(CliCommands::Help),
SEND_COMMAND => Ok(CliCommands::Send),
READY_COMMAND => Ok(CliCommands::Ready),
_ => Err(UnknownCommandError),
}
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
@@ -11,28 +47,48 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
return Ok(());
};
let help_msg: String = format!(
"\n┌────Help────
│\t {} - quit
│\t {} - show this message
│\t {} - message the server you're ready
│\t {} - send text message to the server
",
QUIT_COMMAND, HELP_COMMAND, READY_COMMAND, SEND_COMMAND,
);
client.update();
println!("=== Write to stding to send text messages ===");
println!("Write /close to leave");
info!("====== Type /help for help ========");
let mut buffer = String::new();
loop {
io::stdin().read_line(&mut buffer)?;
if buffer == "/close\n" {
let words: Vec<&str> = buffer.split_whitespace().collect();
let cmd = words[0];
let mut args: String = words[1..].iter().map(|s| s.to_string() + " ").collect();
args = args.trim().to_string();
match CliCommands::try_from(cmd) {
Ok(cmd) => match cmd {
CliCommands::Quit => {
info!("Bye bye");
break;
}
if buffer == "/test\n" {
buffer = String::from("A").repeat(1024 * 1024 * 2);
}
if buffer == "/ready\n" {
CliCommands::Help => {
info!("{}", help_msg);
buffer.clear();
client.signal_readiness().await;
continue;
}
client.send_text_message(buffer.clone()).await;
CliCommands::Ready => {
client.signal_readiness().await;
buffer.clear();
}
CliCommands::Send => {
client.send_text_message(args).await;
buffer.clear();
}
},
Err(e) => error!("{}", e),
}
buffer.clear();
}