waves_rust/util/
base58.rs

1use crate::error::Result;
2
3pub struct Base58;
4
5impl Base58 {
6    pub fn decode(source: &str) -> Result<Vec<u8>> {
7        Ok(bs58::decode(source).into_vec()?)
8    }
9
10    pub fn encode(bytes: &Vec<u8>, with_prefix: bool) -> String {
11        let base58string = bs58::encode(bytes).into_string();
12        if with_prefix {
13            return format!("base58:{}", base58string);
14        }
15        base58string
16    }
17
18    pub fn string_is_valid(encoded: &str) -> bool {
19        bs58::decode(encoded).into_vec().is_ok()
20    }
21}
22
23#[cfg(test)]
24mod tests {
25    use crate::util::Base58;
26
27    #[test]
28    fn test_valid_base58string() {
29        let base58string = "7LBopaBdBzQbgqrnwgmgCDhcSTb32MYhE96SnSHcqZC2";
30        assert_eq!(Base58::string_is_valid(base58string), true);
31    }
32
33    #[test]
34    fn test_invalid_base58string() {
35        let empty_string = "";
36        let invalid_string = "0LBopaBdBzQbgqrnwgmgCDhcSTb32MYhE96SnSHcqZC2";
37        assert_eq!(Base58::string_is_valid(empty_string), true);
38        assert_eq!(Base58::string_is_valid(invalid_string), false);
39    }
40
41    #[test]
42    fn test_decode_string() {
43        let test_string = "1LBopaBdBzQbgqrnwgmgCDhcSTb32MYhE96SnSHcqZC2";
44        let bytes = Base58::decode(test_string).expect("failed to decode base58 from string");
45        let base58string = Base58::encode(&bytes, false);
46        let base58string_with_prefix = Base58::encode(&bytes, true);
47        assert_eq!(test_string, base58string);
48        assert_eq!(
49            base58string_with_prefix,
50            "base58:1LBopaBdBzQbgqrnwgmgCDhcSTb32MYhE96SnSHcqZC2"
51        )
52    }
53}