walletconnect 0.1.0

WalletConnect client implementation in Rust.
Documentation
use data_encoding::{DecodeError, DecodeKind, HEXLOWER_PERMISSIVE as HEX};

pub fn encode(data: impl AsRef<[u8]>) -> String {
    HEX.encode(data.as_ref())
}

pub fn decode_mut(
    bytes: impl AsRef<[u8]>,
    mut buffer: impl AsMut<[u8]>,
) -> Result<(), DecodeError> {
    let bytes = bytes.as_ref();
    let buffer = buffer.as_mut();

    let decode_len = HEX.decode_len(bytes.len())?;
    if buffer.len() != decode_len {
        return Err(DecodeError {
            position: 0,
            kind: DecodeKind::Length,
        });
    }

    HEX.decode_mut(bytes, buffer).map_err(|err| err.error)?;
    Ok(())
}

pub fn decode(bytes: impl AsRef<[u8]>) -> Result<Vec<u8>, DecodeError> {
    let bytes = bytes.as_ref();

    let buffer_len = HEX.decode_len(bytes.len())?;
    let mut buffer = vec![0; buffer_len];

    decode_mut(bytes, &mut buffer)?;
    Ok(buffer)
}