//mod checksum; not used mod compression; mod encryption; mod hash; mod lru_cache; mod chunk; pub mod cli; pub mod msgpack; pub use self::chunk::*; pub use self::compression::*; pub use self::encryption::*; pub use self::hash::*; pub use self::lru_cache::*; pub fn to_hex(data: &[u8]) -> String { data.iter().map(|b| format!("{:02x}", b)).collect::>().join("") } pub fn parse_hex(hex: &str) -> Result, ()> { let mut b = Vec::with_capacity(hex.len() / 2); let mut modulus = 0; let mut buf = 0; for (_, byte) in hex.bytes().enumerate() { buf <<= 4; match byte { b'A'...b'F' => buf |= byte - b'A' + 10, b'a'...b'f' => buf |= byte - b'a' + 10, b'0'...b'9' => buf |= byte - b'0', b' '|b'\r'|b'\n'|b'\t' => { buf >>= 4; continue } _ => return Err(()), } modulus += 1; if modulus == 2 { modulus = 0; b.push(buf); } } match modulus { 0 => Ok(b.into_iter().collect()), _ => Err(()), } }