2023-01-10 06:56:41 -08:00
|
|
|
use base64::Engine;
|
2022-12-16 18:35:49 -08:00
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
|
|
|
|
#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize)]
|
|
|
|
#[serde(rename_all = "camelCase")]
|
|
|
|
pub enum BinaryEncoding {
|
|
|
|
#[default]
|
|
|
|
Base58,
|
|
|
|
Base64,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(thiserror::Error, Debug)]
|
|
|
|
pub enum BinaryCodecError {
|
|
|
|
#[error("Base58DecodeError {0}")]
|
|
|
|
Base58DecodeError(#[from] bs58::decode::Error),
|
|
|
|
#[error("Base58EncodeError {0}")]
|
|
|
|
Base58EncodeError(#[from] bs58::encode::Error),
|
|
|
|
#[error("Base64DecodeError {0}")]
|
|
|
|
Base64DecodeError(#[from] base64::DecodeError),
|
|
|
|
}
|
|
|
|
|
|
|
|
impl BinaryEncoding {
|
|
|
|
pub fn decode<D: AsRef<[u8]>>(&self, to_decode: D) -> Result<Vec<u8>, BinaryCodecError> {
|
|
|
|
match self {
|
|
|
|
Self::Base58 => Ok(bs58::decode(to_decode).into_vec()?),
|
2023-01-10 06:56:41 -08:00
|
|
|
Self::Base64 => Ok(base64::engine::general_purpose::STANDARD.decode(to_decode)?),
|
2022-12-16 18:35:49 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn encode<E: AsRef<[u8]>>(&self, to_encode: E) -> String {
|
|
|
|
match self {
|
|
|
|
Self::Base58 => bs58::encode(to_encode).into_string(),
|
2023-01-10 06:56:41 -08:00
|
|
|
Self::Base64 => base64::engine::general_purpose::STANDARD.encode(to_encode),
|
2022-12-16 18:35:49 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|