1use core::convert::TryFrom;
2use crate::{Length, Result};
3
4#[derive(Copy, Clone, Debug, Eq, PartialEq)]
6pub struct Slice<'a> {
7 inner: &'a [u8],
9
10 length: Length,
12}
13
14impl<'a> Slice<'a> {
15 pub fn new(slice: &'a [u8]) -> Result<Self> {
18 Ok(Self {
19 inner: slice,
20 length: Length::try_from(slice.len())?,
21 })
22 }
23
24 pub fn as_bytes(&self) -> &'a [u8] {
26 self.inner
27 }
28
29 pub fn length(self) -> Length {
31 self.length
32 }
33
34 pub fn is_empty(self) -> bool {
36 self.length() == Length::zero()
37 }
38}
39
40impl AsRef<[u8]> for Slice<'_> {
41 fn as_ref(&self) -> &[u8] {
42 self.as_bytes()
43 }
44}
45