lite-rpc/src/encoding.rs

37 lines
1.1 KiB
Rust
Raw Normal View History

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
}
}
}