diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..6ac0b4a --- /dev/null +++ b/src/main.rs | |||
| @@ -0,0 +1,40 @@ | |||
| 1 | use std::{io::Write, path::PathBuf}; | ||
| 2 | |||
| 3 | use clap::Parser; | ||
| 4 | |||
| 5 | #[derive(Debug, Parser)] | ||
| 6 | struct Args { | ||
| 7 | file: Option<String>, | ||
| 8 | } | ||
| 9 | |||
| 10 | fn main() -> Result<(), Box<dyn std::error::Error>> { | ||
| 11 | let stdout = std::io::stdout(); | ||
| 12 | let handle = stdout.lock(); | ||
| 13 | let mut writer = std::io::BufWriter::new(handle); | ||
| 14 | |||
| 15 | let args = Args::parse(); | ||
| 16 | let mut reader = match args.file { | ||
| 17 | Some(file) => { | ||
| 18 | let path = PathBuf::from(file); | ||
| 19 | let file = std::fs::File::open(path)?; | ||
| 20 | Box::new(std::io::BufReader::new(file)) as Box<dyn std::io::Read> | ||
| 21 | } | ||
| 22 | None => Box::new(std::io::BufReader::new(std::io::stdin())) as Box<dyn std::io::Read>, | ||
| 23 | }; | ||
| 24 | |||
| 25 | let mut buf = [0u8; 1024]; | ||
| 26 | write!(writer, "let _ : &'static [u8] = &[")?; | ||
| 27 | loop { | ||
| 28 | let n = reader.read(&mut buf)?; | ||
| 29 | if n == 0 { | ||
| 30 | break; | ||
| 31 | } | ||
| 32 | for i in 0..n { | ||
| 33 | write!(writer, "{:#02X},", buf[i])?; | ||
| 34 | } | ||
| 35 | } | ||
| 36 | write!(writer, "];")?; | ||
| 37 | writer.flush()?; | ||
| 38 | |||
| 39 | Ok(()) | ||
| 40 | } | ||
