use std::{io::Write, path::PathBuf}; use clap::Parser; #[derive(Debug, Parser)] struct Args { file: Option, } fn main() -> Result<(), Box> { let stdout = std::io::stdout(); let handle = stdout.lock(); let mut writer = std::io::BufWriter::new(handle); let args = Args::parse(); let mut reader = match args.file { Some(file) => { let path = PathBuf::from(file); let file = std::fs::File::open(path)?; Box::new(std::io::BufReader::new(file)) as Box } None => Box::new(std::io::BufReader::new(std::io::stdin())) as Box, }; let mut buf = [0u8; 1024]; write!(writer, "[")?; loop { let n = reader.read(&mut buf)?; if n == 0 { break; } for i in 0..n { write!(writer, "{:#02X},", buf[i])?; } } write!(writer, "];")?; writer.flush()?; Ok(()) }