Function plain::slice_from_bytes [] [src]

pub fn slice_from_bytes<T>(bytes: &[u8]) -> Result<&[T], Error> where
    T: Plain

Similar to from_bytes(), except that the output is a slice of T, instead of a reference to a single T. All concerns about alignment also apply here, but size is handled differently.

The result slice's length is set to be bytes.len() / size_of::<T>(), and there are no requirements for input size. I.e. the result may be empty slice, and the input slice doesn't necessarily have to end on T's boundary. The latter has pragmatic reasons: If the length of the array is not known in advance, e.g. if it's terminated by a special element, it's perfectly legal to turn the whole rest of data into &[T] and set the proper length after inspecting the array.

In many cases it is preferrable to allocate a value/slice of the target type and use copy_from_bytes() to copy data instead. That way, any issues with alignment are implicitly avoided.