pub struct Encoder<W: Write> { /* private fields */ }Expand description
Stream Bech32-encoded data to a writer without allocation.
Writing to an Encoder can be done iteratively.
The destination writer can be anything that implements
Write. Examples: Vec<u8>, File,
TcpStream, etc.
Note: You must flush() the encoder when you have finished
writing data or the output will be incomplete.
§Examples
Encode to a Vec<u8>:
use std::io::Write;
use pbech32::{Encoder, Hrp, Scheme};
let mut vec: Vec<u8> = Vec::new(); // output vector
let hrp: Hrp = "hello".parse()?; // human readable part
let mut encoder = Encoder::new(&mut vec, Scheme::Bech32m, hrp)?; // create encoder
encoder.write_all(b"folks")?; // write data
encoder.flush()?; // flush encoder (REQUIRED)
let got = str::from_utf8(vec.as_ref())?; // convert output vector to string
assert_eq!(got, "hello1vehkc6mn27xpct"); // check resultIteratively encode to a Vec<u8>:
use std::io::Write;
use pbech32::{Encoder, Hrp, Scheme};
let mut vec: Vec<u8> = Vec::new(); // output vector
let hrp: Hrp = "hi".parse()?; // human readable part
let mut encoder = Encoder::new(&mut vec, Scheme::Bech32m, hrp)?; // create encoder
for chunk in vec![b"foo", b"bar", b"baz"] {
encoder.write_all(chunk)?; // write chunk
}
encoder.flush()?; // flush encoder (REQUIRED)
let got = str::from_utf8(vec.as_ref())?; // convert output vector to string
assert_eq!(got, "hi1vehk7cnpwf3xz7skgej7x"); // check resultSee examples/stream.rs for an example of streaming to standard
output.
Implementations§
Source§impl<W: Write> Encoder<W>
impl<W: Write> Encoder<W>
Sourcepub fn new(inner: W, scheme: Scheme, hrp: Hrp) -> Result<Self>
pub fn new(inner: W, scheme: Scheme, hrp: Hrp) -> Result<Self>
Create streaming encoder.
§Parameters
inner: Wrapped writerscheme: Checksum schemehrp: Human-readable part
§Example
Encode to a Vec<u8>:
use std::io::Write;
use pbech32::{Encoder, Hrp, Scheme};
let mut vec: Vec<u8> = Vec::new(); // output vector
let hrp: Hrp = "hello".parse()?; // human readable part
let mut encoder = Encoder::new(&mut vec, Scheme::Bech32m, hrp)?; // create encoder
encoder.write_all(b"folks")?; // write data
encoder.flush()?; // flush encoder (REQUIRED)
let got = str::from_utf8(vec.as_ref())?; // convert output vector to string
assert_eq!(got, "hello1vehkc6mn27xpct"); // check resultSee examples/stream.rs for an example of streaming to standard
output.
Examples found in repository?
examples/stream.rs (line 28)
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}Trait Implementations§
Source§impl<W: Write> Write for Encoder<W>
impl<W: Write> Write for Encoder<W>
Source§fn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
Writes a buffer into this writer, returning how many bytes were written. Read more
Source§fn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
Flushes this output stream, ensuring that all intermediately buffered
contents reach their destination. Read more
Source§fn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
🔬This is a nightly-only experimental API. (
can_vector)1.0.0 · Source§fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
Attempts to write an entire buffer into this writer. Read more
Source§fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
🔬This is a nightly-only experimental API. (
write_all_vectored)Attempts to write multiple buffers into this writer. Read more
Auto Trait Implementations§
impl<W> Freeze for Encoder<W>where
W: Freeze,
impl<W> RefUnwindSafe for Encoder<W>where
W: RefUnwindSafe,
impl<W> Send for Encoder<W>where
W: Send,
impl<W> Sync for Encoder<W>where
W: Sync,
impl<W> Unpin for Encoder<W>where
W: Unpin,
impl<W> UnsafeUnpin for Encoder<W>where
W: UnsafeUnpin,
impl<W> UnwindSafe for Encoder<W>where
W: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more