Skip to main content

RawBech32

Struct RawBech32 

Source
pub struct RawBech32 {
    pub scheme: Scheme,
    pub hrp: Hrp,
    pub data: Vec<u8>,
}
Expand description

Parsed Bech32 structure with raw 5-bit data field.

Use Bech32 instead to automatically encode and decode / 8-bit data.

§Examples

Decode Bech32m string as RawBech32:

use pbech32::{RawBech32, Scheme};

let s = "a1qypqxpq9mqr2hj"; // bech32m string
let got: RawBech32 = s.parse()?; // parse string

assert_eq!(got.scheme, Scheme::Bech32m); // check scheme
assert_eq!(got.hrp.to_string(), "a"); // check hrp
assert_eq!(got.data, vec![0, 4, 1, 0, 6, 1, 0, 5]); // check data

Encode RawBech32 as string:

use pbech32::{bits::convert, RawBech32, Scheme};

let exp = "a1qypqxpq9mqr2hj"; // expected result

// encode 8-bit bytes as vector of 5-bit bytes
let data = convert::<8, 5>(&[1, 2, 3, 4, 5]);

// populate structure
let b = RawBech32 {
  scheme: Scheme::Bech32m, // checksum scheme
  hrp: "a".parse()?, // human-readable part
  data: data, // 5-bit data
};

let got = b.to_string(); // convert to string
assert_eq!(got, exp); // check result

Use RawBech32::new() to parse a specific scheme:

use pbech32::{RawBech32, Scheme};

// expected result
let exp = RawBech32 {
  scheme: Scheme::Bech32m, // checksum scheme
  hrp: "a".parse()?, // human-readable part
  data: vec![0, 4, 1, 0, 6, 1, 0, 5], // 5-bit data
};

let s = "a1qypqxpq9mqr2hj"; // bech32m string
let got = RawBech32::new(s, Some(Scheme::Bech32m))?; // parse string
assert_eq!(got, exp); // check result

Fields§

§scheme: Scheme

Scheme

Affects checksum encoding.

§hrp: Hrp

Human-readable part.

Human-readable prefix containing ASCII characters in the range 33..127.

§data: Vec<u8>

Raw 5-bit data

Note: Use bits::convert() to decode the 5-bit data in this field.

Implementations§

Source§

impl RawBech32

Source

pub fn new(s: &str, scheme: Option<Scheme>) -> Result<Self, Err>

Parse string as RawBech32 with given scheme.

The difference between this function and str::parse() is that this function allows you to limit parsing to a particular scheme.

Setting the scheme parameter to None enables scheme auto-detection and is equivalent to calling str::parse().

§Example

Decode string using Scheme::Bech32m:

use pbech32::{RawBech32, Scheme};

// expected result
let exp = RawBech32 {
  scheme: Scheme::Bech32m, // checksum scheme
  hrp: "a".parse()?, // human-readable part
  data: vec![0, 4, 1, 0, 6, 1, 0, 5], // 5-bit data
};

let s = "a1qypqxpq9mqr2hj"; // bech32m string
let got = RawBech32::new(s, Some(Scheme::Bech32m))?; // parse string
assert_eq!(got, exp); // check result

Decode string using Scheme::Bech32:

use pbech32::{RawBech32, Scheme};

// expected result
let exp = RawBech32 {
  scheme: Scheme::Bech32, // checksum scheme
  hrp: "a".parse()?, // human-readable part
  data: vec![0, 4, 1, 0, 6, 1, 0, 5], // 5-bit data
};

let s = "a1qypqxpq9wunxjs"; // bech32m string
let got = RawBech32::new(s, Some(Scheme::Bech32))?; // parse string
assert_eq!(got, exp); // check result

Decode string as RawBech32 and auto-detect scheme (equivalent to calling str::parse()):

use pbech32::{RawBech32, Scheme};

// expected result
let exp = RawBech32 {
  scheme: Scheme::Bech32m, // checksum scheme
  hrp: "a".parse()?, // human-readable part
  data: vec![0, 4, 1, 0, 6, 1, 0, 5], // 5-bit data
};

let s = "a1qypqxpq9mqr2hj"; // bech32m string
let got = RawBech32::new(s, None)?; // parse string
assert_eq!(got, exp); // check result

Trait Implementations§

Source§

impl Clone for RawBech32

Source§

fn clone(&self) -> RawBech32

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for RawBech32

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for RawBech32

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromStr for RawBech32

Source§

type Err = Err

The associated error which can be returned from parsing.
Source§

fn from_str(s: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
Source§

impl PartialEq for RawBech32

Source§

fn eq(&self, other: &RawBech32) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Eq for RawBech32

Source§

impl StructuralPartialEq for RawBech32

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.