platform_value/
string_encoding.rs1use crate::Error;
2use base64;
3use base64::prelude::BASE64_STANDARD;
4use base64::Engine;
5use bs58;
6use std::fmt;
7
8#[derive(Debug, Copy, Clone)]
9pub enum Encoding {
10 Base58,
11 Base64,
12 Hex,
13}
14
15pub const ALL_ENCODINGS: [Encoding; 3] = [Encoding::Hex, Encoding::Base58, Encoding::Base64];
16
17impl fmt::Display for Encoding {
18 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
19 match self {
20 Encoding::Base58 => write!(f, "Base58"),
21 Encoding::Base64 => write!(f, "Base64"),
22 Encoding::Hex => write!(f, "Hex"),
23 }
24 }
25}
26
27pub fn decode(encoded_value: &str, encoding: Encoding) -> Result<Vec<u8>, Error> {
28 match encoding {
29 Encoding::Base58 => Ok(bs58::decode(encoded_value)
30 .into_vec()
31 .map_err(|e| Error::StringDecodingError(e.to_string()))?),
32 Encoding::Base64 => Ok(BASE64_STANDARD
33 .decode(encoded_value)
34 .map_err(|e| Error::StringDecodingError(e.to_string()))?),
35 Encoding::Hex => Ok(
36 hex::decode(encoded_value).map_err(|e| Error::StringDecodingError(e.to_string()))?
37 ),
38 }
39}
40
41pub fn encode(value: &[u8], encoding: Encoding) -> String {
42 match encoding {
43 Encoding::Base58 => bs58::encode(value).into_string(),
44 Encoding::Base64 => BASE64_STANDARD.encode(value),
45 Encoding::Hex => hex::encode(value),
46 }
47}