use base64::Engine; use thiserror::Error; #[derive(Debug, Error)] pub enum HexSerializeError { #[error("Invalid hex char: {0}")] InvalidHexChar(#[from] hex::FromHexError), } #[derive(Debug, Error)] pub enum Base64SerializeError { #[error("Cannot encode Base64 slice: {0}")] EncodeFailed(#[from] base64::EncodeSliceError), #[error("Cannot decode Base64 string: {0}")] DecodeFailed(#[from] base64::DecodeError), } /// 将指定可以转换为字节数组的内容以十六进制字符串的形式输出。 pub fn to_hex>(input: T) -> String { hex::encode(input) } /// 将十六进制字符串转换为字节数组,如果字符串中存在非十六进制字符,则返回错误。 pub fn from_hex(input: &str) -> Result, HexSerializeError> { hex::decode(input).map_err(|e| e.into()) } /// 将给定的可以转换为字节数组的内容以Base64编码的字符串形式输出。 pub fn to_base64_str>(input: T) -> String { base64::prelude::BASE64_STANDARD.encode(input) } /// 将给定的可以转换为字节数组的内容以Base64编码的字节数组形式输出。 pub fn to_base64_vec>(input: T) -> Result, Base64SerializeError> { let mut buf = Vec::new(); base64::prelude::BASE64_STANDARD .encode_slice(input.as_ref(), &mut buf) .map_err(|e| Base64SerializeError::EncodeFailed(e))?; Ok(buf) } /// 将给定的Base64编码的字符串转换为字节数组,如果字符串中存在不能被识别的内容,则返回错误。 pub fn from_base64_str(input: &str) -> Result, Base64SerializeError> { base64::prelude::BASE64_STANDARD .decode(input) .map_err(|e| e.into()) } /// 将给定的Base64编码的字节数组转换为原始字节数组,如果字节数组中存在不能被识别转换的内容,则返回错误。 pub fn from_base64_vec>(input: T) -> Result, Base64SerializeError> { let mut buf = Vec::new(); base64::prelude::BASE64_STANDARD .decode_vec(input.as_ref(), &mut buf) .map_err(|e| Base64SerializeError::DecodeFailed(e))?; Ok(buf) }