ps_ecc/
codeword.rs

1use std::ops::{Deref, Range};
2
3use ps_buffer::Buffer;
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<'lt> Deref for Codeword<'lt> {
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<'lt> From<Buffer> for Codeword<'lt> {
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<'lt> AsRef<[u8]> for Codeword<'lt> {
56    fn as_ref(&self) -> &[u8] {
57        self
58    }
59}