1use std::io;
2
3use io::Read;
4
5use io::BufWriter;
6use io::Write;
7
8pub fn reader2wat2wasm2writer<R, W>(rdr: R, mut wtr: W, max_bytes: u64) -> Result<(), io::Error>
9where
10 R: Read,
11 W: Write,
12{
13 let mut taken = rdr.take(max_bytes);
14 let mut buf: Vec<u8> = vec![];
15 taken.read_to_end(&mut buf)?;
16 let parsed = wat::parse_bytes(&buf).map_err(io::Error::other)?;
17 let wasm: &[u8] = &parsed;
18 wtr.write_all(wasm)?;
19 wtr.flush()
20}
21
22pub const MAX_BYTES_DEFAULT: u64 = 16777216;
23
24pub fn stdin2wat2wasm2stdout(max_bytes: u64) -> Result<(), io::Error> {
25 let o = io::stdout();
26 let mut ol = o.lock();
27 reader2wat2wasm2writer(io::stdin().lock(), BufWriter::new(&mut ol), max_bytes)?;
28 ol.flush()
29}