Skip to main content

stream/
stream.rs

1//! Read human-readable part (HRP) from first command-line argument and
2//! data from standard input, then stream [Bech32m][]-encoded string to
3//! standard output.
4//!
5//! # Example
6//!
7//! ```sh
8//! $ echo -n 'world' | cargo run -q --example stream hello; echo
9//! hello1wahhymryxruu7j
10//! ```
11//!
12//! [bech32m]: https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki
13//!   "Bech32m (BIP350)"
14
15use std::io::Write;
16use pbech32::{Encoder, Hrp, Scheme};
17
18fn main() -> Result<(), Box<dyn std::error::Error>> {
19  // get/check args
20  let args: Vec<String> = std::env::args().collect();
21  if args.len() != 2 {
22    panic!("Usage: {} [hrp]", args[0]);
23  }
24
25  let hrp: Hrp = args[1].parse()?; // parse first arg as hrp
26  let (mut stdin, mut stdout) = (std::io::stdin(), std::io::stdout()); // get stdio
27
28  let mut encoder = Encoder::new(&mut stdout, Scheme::Bech32m, hrp)?; // create encoder
29  std::io::copy(&mut stdin, &mut encoder)?; // bech32-encode stdin to stdout
30  encoder.flush()?; // flush encoder
31
32  Ok(()) // return success
33}