Merge branch 'master' of https://github.com/gavofyork/ethcore-util
This commit is contained in:
commit
c6aa0c5dc0
66
Cargo.lock
generated
66
Cargo.lock
generated
@ -1,66 +0,0 @@
|
|||||||
[root]
|
|
||||||
name = "ethcore-util"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"env_logger 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"log 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "aho-corasick"
|
|
||||||
version = "0.3.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"memchr 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "env_logger"
|
|
||||||
version = "0.3.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"log 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"regex 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "libc"
|
|
||||||
version = "0.1.12"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "libc"
|
|
||||||
version = "0.2.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "log"
|
|
||||||
version = "0.3.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"libc 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "memchr"
|
|
||||||
version = "0.1.7"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"libc 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "regex"
|
|
||||||
version = "0.1.41"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
dependencies = [
|
|
||||||
"aho-corasick 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"memchr 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"regex-syntax 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "regex-syntax"
|
|
||||||
version = "0.2.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
@ -9,3 +9,5 @@ authors = ["Ethcore <admin@ethcore.io>"]
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
log = "0.3"
|
log = "0.3"
|
||||||
env_logger = "0.3"
|
env_logger = "0.3"
|
||||||
|
rustc-serialize = "0.3"
|
||||||
|
arrayvec = "0.3"
|
13
src/error.rs
Normal file
13
src/error.rs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
use rustc_serialize::hex::*;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum EthcoreError {
|
||||||
|
FromHex(FromHexError),
|
||||||
|
BadSize
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<FromHexError> for EthcoreError {
|
||||||
|
fn from(err: FromHexError) -> EthcoreError {
|
||||||
|
EthcoreError::FromHex(err)
|
||||||
|
}
|
||||||
|
}
|
36
src/hash.rs
Normal file
36
src/hash.rs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
use rustc_serialize::hex::*;
|
||||||
|
use error::EthcoreError;
|
||||||
|
use std::str::FromStr;
|
||||||
|
|
||||||
|
macro_rules! impl_hash {
|
||||||
|
($from: ident, $size: expr) => {
|
||||||
|
#[derive(PartialEq, Debug)]
|
||||||
|
struct $from ([u8; $size]);
|
||||||
|
|
||||||
|
impl FromStr for $from {
|
||||||
|
// type Output = $from;
|
||||||
|
type Err = EthcoreError;
|
||||||
|
|
||||||
|
fn from_str(s: &str) -> Result<$from, EthcoreError> {
|
||||||
|
let a = try!(s.from_hex());
|
||||||
|
if a.len() != $size { return Err(EthcoreError::BadSize); }
|
||||||
|
let mut ret = $from([0;$size]);
|
||||||
|
for i in 0..$size {
|
||||||
|
ret.0[i] = a[i];
|
||||||
|
}
|
||||||
|
Ok(ret)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl_hash!(Hash64, 8);
|
||||||
|
impl_hash!(Hash128, 16);
|
||||||
|
impl_hash!(Address, 20);
|
||||||
|
impl_hash!(Hash256, 32);
|
||||||
|
//impl_hash!(Hash512, 64);
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn it_works() {
|
||||||
|
assert_eq!(Hash64::from_str("0123456789abcdef").unwrap(), Hash64([0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef]));
|
||||||
|
}
|
@ -1,3 +1,7 @@
|
|||||||
|
extern crate rustc_serialize;
|
||||||
|
|
||||||
|
pub mod error;
|
||||||
|
pub mod hash;
|
||||||
pub mod bytes;
|
pub mod bytes;
|
||||||
pub mod rlp;
|
pub mod rlp;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user