use codec_base64url::base64url_to_bytes;
use crate::{base58btc_decode, MultibaseError};
pub fn multibase_to_bytes(multibase: &str) -> Result<Vec<u8>, MultibaseError> {
const MAX_MULTIBASE_INPUT_LEN: usize = codec_base64url::MAX_BASE64URL_INPUT_LEN + 1;
if multibase.len() > MAX_MULTIBASE_INPUT_LEN {
return Err(MultibaseError::InputTooLarge);
}
let mut chars = multibase.chars();
let prefix = chars.next().ok_or(MultibaseError::TooShort)?;
let data = chars.as_str();
match prefix {
'z' => Ok(base58btc_decode(data)?),
'u' => base64url_to_bytes(data).map_err(|_| MultibaseError::Base64Url),
_ => Err(MultibaseError::UnsupportedPrefix),
}
}