pub struct Alphabet { /* private fields */ }
Expand description
Prepared Alphabet for
EncodeBuilder::with_alphabet
and
DecodeBuilder::with_alphabet
.
Implementations§
source§impl Alphabet
impl Alphabet
sourcepub const BITCOIN: &'static Self = _
pub const BITCOIN: &'static Self = _
Bitcoin’s alphabet as defined in their Base58Check encoding.
See https://en.bitcoin.it/wiki/Base58Check_encoding#Base58_symbol_chart
sourcepub const MONERO: &'static Self = _
pub const MONERO: &'static Self = _
Monero’s alphabet as defined in this forum post.
See https://forum.getmonero.org/4/academic-and-technical/221/creating-a-standard-for-physical-coins
sourcepub const RIPPLE: &'static Self = _
pub const RIPPLE: &'static Self = _
Ripple’s alphabet as defined in their wiki.
sourcepub const FLICKR: &'static Self = _
pub const FLICKR: &'static Self = _
Flickr’s alphabet for creating short urls from photo ids.
See https://www.flickr.com/groups/api/discuss/72157616713786392/
sourcepub const DEFAULT: &'static Self = Self::BITCOIN
pub const DEFAULT: &'static Self = Self::BITCOIN
The default alphabet used if none is given. Currently is the
BITCOIN
alphabet.
sourcepub const fn new(base: &[u8; 58]) -> Result<Self, Error>
pub const fn new(base: &[u8; 58]) -> Result<Self, Error>
Create prepared alphabet, checks that the alphabet is pure ASCII and that there are no duplicate characters, which would result in inconsistent encoding/decoding
let alpha = bs58::Alphabet::new(
b" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY"
)?;
let decoded = bs58::decode("he11owor1d")
.with_alphabet(bs58::Alphabet::RIPPLE)
.into_vec()?;
let encoded = bs58::encode(decoded)
.with_alphabet(&alpha)
.into_string();
assert_eq!("#ERRN)N RD", encoded);
§Errors
§Duplicate Character
let alpha = b"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
assert_eq!(
bs58::alphabet::Error::DuplicateCharacter { character: 'a', first: 0, second: 1 },
bs58::Alphabet::new(alpha).unwrap_err());
§Non-ASCII Character
let mut alpha = *b"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
alpha[1] = 255;
assert_eq!(
bs58::alphabet::Error::NonAsciiCharacter { index: 1 },
bs58::Alphabet::new(&alpha).unwrap_err());
sourcepub const fn new_unwrap(base: &[u8; 58]) -> Self
pub const fn new_unwrap(base: &[u8; 58]) -> Self
Same as Self::new
, but gives a panic instead of an Err
on bad input.
Intended to support usage in const
context until Result::unwrap
is able to be called.
const ALPHA: &'static bs58::Alphabet = &bs58::Alphabet::new_unwrap(
b" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY"
);
let decoded = bs58::decode("he11owor1d")
.with_alphabet(bs58::Alphabet::RIPPLE)
.into_vec()?;
let encoded = bs58::encode(decoded)
.with_alphabet(ALPHA)
.into_string();
assert_eq!("#ERRN)N RD", encoded);
If your alphabet is inconsistent then this will fail to compile in a const
context:
const _: &'static bs58::Alphabet = &bs58::Alphabet::new_unwrap(
b"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
);
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Alphabet
impl RefUnwindSafe for Alphabet
impl Send for Alphabet
impl Sync for Alphabet
impl Unpin for Alphabet
impl UnwindSafe for Alphabet
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
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)