ceres_cli/
util.rs

1//! Util
2use crate::{Error, Result};
3
4/// Decode address to [u8; 32]
5///
6/// ```
7/// assert!(
8///   ceres_cli::util::decode_addr(
9///     "0x46da65a1be5b49d639a934e27b8a773c3fc2540f488df4c2afb9880ee34a6346"
10///   ).is_ok()
11/// );
12/// ```
13pub fn decode_addr(addr: &str) -> Result<[u8; 32]> {
14    let slice = hex::decode(if let Some(strriped) = addr.strip_prefix("0x") {
15        strriped
16    } else {
17        &addr
18    })
19    .map_err(|_| Error::DecodeAddressFailed(addr.into()))?;
20    if slice.len() != 32 {
21        return Err(Error::DecodeAddressFailed(addr.into()));
22    }
23
24    let mut res: [u8; 32] = [0; 32];
25    res.copy_from_slice(&slice);
26    Ok(res)
27}
28
29/// Pad spaces for str
30pub fn pad(s: &str, spaces: usize) -> String {
31    let pad = spaces - s.len();
32    let mut o = String::new();
33    o.push_str(s);
34    o.push_str(&" ".repeat(pad));
35    o
36}