DEV Community

Ramin Farajpour Cami
Ramin Farajpour Cami

Posted on

A small library for writing line-oriented command interpreters in the Rust

cli-rs

What is line-oriented command interpreters?

A line-oriented command interpreter, also known as a command-line interpreter or shell, is a software program or interface that allows users to interact with a computer or operating system by entering text-based commands. Users type commands and arguments in a sequential, line-by-line manner, and the interpreter processes these commands and carries out the requested operations.

Example

use std::cell::RefCell;
use std::rc::Rc;
use cli_rs::cli::cmd::CommandHandler;
use cli_rs::cli::cmd::Cmd;
use cli_rs::about;
use cli_rs::hello;

struct QuitCommand;
struct HelpCommand;

impl CommandHandler for HelpCommand {
    fn execute(&self, _cmd: Rc<RefCell<Cmd>>, _args: String) {
        println!("Help");
    }
}

impl CommandHandler for QuitCommand {
    fn execute(&self, _cmd: Rc<RefCell<Cmd>>, _args: String) {
        std::process::exit(0);
    }
}

fn main() {
    let mut cmd = Cmd::new();
    cmd.intro = Some("Welcome to Rust command interpreter!".to_string());

    cmd.add_command("hello", Rc::new(hello::HelloCommand));
    cmd.add_command("quit", Rc::new(QuitCommand));
    cmd.add_command("help", Rc::new(HelpCommand));
    cmd.add_command("about", Rc::new(about::AboutCommand));

    cmd.cmdloop();
}


Enter fullscreen mode Exit fullscreen mode

Output

# cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.03s
     Running `target/debug/cmd-rs`
Welcome to Rust command interpreter!
[cli-rs] help
Help
[cli-rs] hello world! 
Hello world!
[cli-rs] about
About me
[cli-rs] quit

Enter fullscreen mode Exit fullscreen mode

Code :

https://github.com/raminfp/cli-rs

Top comments (0)