ps_ecc/
codeword.rs

1use std::ops::{Deref, Range};
2
3use ps_buffer::{Buffer, SharedBuffer};
4
5use crate::cow::Cow;
6
7#[derive(Debug, Hash, PartialEq, Eq)]
8pub struct Codeword<'lt> {
9    pub codeword: Cow<'lt>,
10    pub range: Range<usize>,
11}
12
13impl<'lt> Codeword<'lt> {
14    #[must_use]
15    pub fn into_inner(self) -> Cow<'lt> {
16        self.codeword
17    }
18}
19
20impl Deref for Codeword<'_> {
21    type Target = [u8];
22
23    fn deref(&self) -> &Self::Target {
24        &self.codeword[self.range.clone()]
25    }
26}
27
28impl<'lt> From<Cow<'lt>> for Codeword<'lt> {
29    fn from(value: Cow<'lt>) -> Self {
30        let range = 0..value.len();
31        let codeword = value;
32
33        Self { codeword, range }
34    }
35}
36
37impl<'lt> From<&'lt [u8]> for Codeword<'lt> {
38    fn from(value: &'lt [u8]) -> Self {
39        let range = 0..value.len();
40        let codeword = value.into();
41
42        Self { codeword, range }
43    }
44}
45
46impl From<Buffer> for Codeword<'_> {
47    fn from(value: Buffer) -> Self {
48        let range = 0..value.len();
49        let codeword = value.into();
50
51        Self { codeword, range }
52    }
53}
54
55impl From<SharedBuffer> for Codeword<'_> {
56    fn from(value: SharedBuffer) -> Self {
57        let range = 0..value.len();
58        let codeword = value.into();
59
60        Self { codeword, range }
61    }
62}
63
64impl AsRef<[u8]> for Codeword<'_> {
65    fn as_ref(&self) -> &[u8] {
66        self
67    }
68}