summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs40
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 @@
1use std::{io::Write, path::PathBuf};
2
3use clap::Parser;
4
5#[derive(Debug, Parser)]
6struct Args {
7 file: Option<String>,
8}
9
10fn 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}