use clap::Parser; use std::fs::File; use std::io::{self, BufRead, Write}; #[derive(Parser, Debug)] #[command(version, about, long_about = None)] struct Args { /// Script to run #[arg(short, long)] script: Option, } fn run(lines: io::Lines>) -> () { for line in lines { println!("Line: {}", line.unwrap()); } } fn run_file(script: String) -> Result<(), io::Error> { let file = File::open(script)?; run(io::BufReader::new(file).lines()); Ok(()) } fn run_prompt() -> Result<(), io::Error> { loop { print!("> "); io::stdout().flush()?; let mut buffer = String::new(); io::stdin().read_line(&mut buffer)?; if buffer.len() == 0 { break; } println!("input: '{}', {}", buffer, buffer.len()); } Ok(()) } fn main() -> Result<(), Box> { let args = Args::parse(); if let Some(script) = args.script { run_file(script)?; } else { run_prompt()?; } Ok(()) }