adding docs

This commit is contained in:
Nikolay Volf 2016-04-17 11:06:59 +03:00
parent 2812dee8d4
commit 060e4bcd32

View File

@ -247,7 +247,7 @@ pub trait FromRawBytes : Sized {
fn from_bytes(d: &[u8]) -> Result<Self, FromBytesError>; fn from_bytes(d: &[u8]) -> Result<Self, FromBytesError>;
} }
impl<T> FromRawBytes for (T) where T: FixedHash { impl<T> FromRawBytes for T where T: FixedHash {
fn from_bytes(bytes: &[u8]) -> Result<Self, FromBytesError> { fn from_bytes(bytes: &[u8]) -> Result<Self, FromBytesError> {
use std::mem; use std::mem;
use std::cmp::Ordering; use std::cmp::Ordering;
@ -279,28 +279,20 @@ impl FromRawBytes for u16 {
} }
} }
impl FromRawBytes for u8 { /// Value that can be serialized from variable-length byte array
fn from_bytes(bytes: &[u8]) -> Result<Self, FromBytesError> {
use std::mem;
use std::cmp::Ordering;
match bytes.len().cmp(&1) {
Ordering::Less => return Err(FromBytesError::NotLongEnough),
Ordering::Greater => return Err(FromBytesError::TooLong),
Ordering::Equal => ()
};
let mut res: Self = unsafe { mem::uninitialized() };
res.copy_raw(bytes);
Ok(res)
}
}
pub trait FromRawBytesVariable : Sized { pub trait FromRawBytesVariable : Sized {
/// Create value from slice
fn from_bytes_var(d: &[u8], len: u64) -> Result<Self, FromBytesError>; fn from_bytes_var(d: &[u8], len: u64) -> Result<Self, FromBytesError>;
} }
impl<T> FromRawBytesVariable for T where T: FromRawBytes { impl<T> FromRawBytesVariable for T where T: FromRawBytes {
fn from_bytes_var(d: &[u8], _len: u64) -> Result<Self, FromBytesError> { fn from_bytes_var(bytes: &[u8], len: u64) -> Result<Self, FromBytesError> {
match bytes.len().cmp(&len) {
Ordering::Less => return Err(FromBytesError::NotLongEnough),
Ordering::Greater => return Err(FromBytesError::TooLong),
Ordering::Equal => ()
};
T::from_bytes(d) T::from_bytes(d)
} }
} }
@ -395,18 +387,18 @@ fn raw_bytes_from_tuple() {
let tup = (vec![1u16, 1u16, 1u16, 1u16], 10u16); let tup = (vec![1u16, 1u16, 1u16, 1u16], 10u16);
let bytes = vec![ let bytes = vec![
// map // map
8u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 8u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8, 0u8,
// four 1u16 // four 1u16
0u8, 1u8, 1u8, 0u8,
0u8, 1u8, 1u8, 0u8,
0u8, 1u8, 1u8, 0u8,
0u8, 1u8, 1u8, 0u8,
// 10u16 // 10u16
0u8, 10u8]; 10u8, 0u8];
type tup = (Vec<u16>, u16); type Tup = (Vec<u16>, u16);
let tup_from = tup::from_bytes(&bytes).unwrap(); let tup_from = Tup::from_bytes(&bytes).unwrap();
assert_eq!(tup, tup_from); assert_eq!(tup, tup_from);
} }