ipld_nostd/multibase/
mod.rs

1//! # multibase
2//!
3//! Implementation of [multibase](https://github.com/multiformats/multibase) in Rust.
4
5use alloc::{string::String, vec::Vec};
6
7mod base;
8mod encoding;
9mod error;
10mod impls;
11
12pub use self::{
13	base::Base,
14	error::{Error, Result},
15};
16
17/// Decode the base string.
18///
19/// # Examples
20///
21/// ```
22/// use multibase::{decode, Base};
23///
24/// assert_eq!(
25/// 	decode("zCn8eVZg").unwrap(),
26/// 	(Base::Base58Btc, b"hello".to_vec())
27/// );
28/// ```
29pub fn decode<T: AsRef<str>>(input: T) -> Result<(Base, Vec<u8>)> {
30	let input = input.as_ref();
31	let code = input.chars().next().ok_or(Error::InvalidBaseString)?;
32	let base = Base::from_code(code)?;
33	let decoded = base.decode(&input[code.len_utf8()..])?;
34	Ok((base, decoded))
35}
36
37/// Encode with the given byte slice to base string.
38///
39/// # Examples
40///
41/// ```
42/// use multibase::{encode, Base};
43///
44/// assert_eq!(encode(Base::Base58Btc, b"hello"), "zCn8eVZg");
45/// ```
46pub fn encode<T: AsRef<[u8]>>(base: Base, input: T) -> String {
47	let input = input.as_ref();
48	let mut encoded = base.encode(input.as_ref());
49	encoded.insert(0, base.code());
50	encoded
51}