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}