implement decode_uint
This commit is contained in:
parent
8c88ff25d0
commit
51156d9fde
1 changed files with 31 additions and 0 deletions
31
src/ebml.rs
31
src/ebml.rs
|
@ -93,6 +93,18 @@ pub fn decode_tag(bytes: &[u8]) -> Result<Option<(u64, Varint, usize)>, Error> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn decode_uint(bytes: &[u8]) -> Result<u64, Error> {
|
||||||
|
if bytes.len() < 1 || bytes.len() > 8 {
|
||||||
|
return Err(Error::CorruptPayload);
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut value: u64 = 0;
|
||||||
|
for byte in bytes {
|
||||||
|
value = (value << 8) + (*byte as u64);
|
||||||
|
}
|
||||||
|
Ok(value)
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
pub struct Ebml<S, T>(pub S, pub T);
|
pub struct Ebml<S, T>(pub S, pub T);
|
||||||
|
|
||||||
|
@ -190,6 +202,25 @@ mod tests {
|
||||||
assert_eq!(decode_tag(&[0x85, 0x40, 52]), Ok(Some((5, Value(52), 3))));
|
assert_eq!(decode_tag(&[0x85, 0x40, 52]), Ok(Some((5, Value(52), 3))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn bad_uints() {
|
||||||
|
assert_eq!(decode_uint(&[]), Err(Error::CorruptPayload));
|
||||||
|
assert_eq!(decode_uint(&[0; 9]), Err(Error::CorruptPayload));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_uints() {
|
||||||
|
assert_eq!(decode_uint(&[0]), Ok(0));
|
||||||
|
assert_eq!(decode_uint(&[0; 8]), Ok(0));
|
||||||
|
assert_eq!(decode_uint(&[1]), Ok(1));
|
||||||
|
assert_eq!(decode_uint(&[0,0,0,0,0,0,0,1]), Ok(1));
|
||||||
|
assert_eq!(decode_uint(&[38]), Ok(38));
|
||||||
|
assert_eq!(decode_uint(&[0,0,0,0,0,0,0,38]), Ok(38));
|
||||||
|
assert_eq!(decode_uint(&[0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF]), Ok(9223372036854775807));
|
||||||
|
assert_eq!(decode_uint(&[0x80,0,0,0,0,0,0,0]), Ok(9223372036854775808));
|
||||||
|
assert_eq!(decode_uint(&[0x80,0,0,0,0,0,0,1]), Ok(9223372036854775809));
|
||||||
|
}
|
||||||
|
|
||||||
struct Dummy;
|
struct Dummy;
|
||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
|
|
Loading…
Reference in a new issue