1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
extern crate hex;
extern crate unsigned_varint;
use std::{env, process};
use unsigned_varint::{decode, encode};
pub fn main() {
let mut args = env::args().skip(1);
let mode =
if let Some(s) = args.next() {
s
} else {
println!("usage: -d <hex-encoded-string> | -e <number>");
process::exit(1)
};
match (mode.as_ref(), args.next()) {
("-d", Some(xs)) => {
let v =
if let Ok(b) = hex::decode(&xs) {
b
} else {
println!("failed to decode hex string");
process::exit(1)
};
match decode::u128(&v) {
Ok((n, _)) => println!("{}", n),
Err(e) => {
println!("{}", e);
process::exit(2)
}
}
}
("-e", Some(xs)) => {
match xs.parse() {
Ok(n) => {
let mut buf = encode::u128_buffer();
let bytes = encode::u128(n, &mut buf);
println!("{}", hex::encode(&bytes))
}
Err(e) => {
println!("{}", e);
process::exit(3)
}
}
}
_ => {
println!("usage: -d <hex-encoded-string> | -e <number>");
process::exit(1)
}
}
}
|