ps-ecc 0.1.0-8

Generates Reed-Solomon error correction codes.
Documentation
use std::ops::{Deref, Range};

use ps_buffer::{Buffer, SharedBuffer};

use crate::cow::Cow;

#[derive(Debug, Hash, PartialEq, Eq)]
pub struct Codeword<'lt> {
    pub codeword: Cow<'lt>,
    pub range: Range<usize>,
}

impl<'lt> Codeword<'lt> {
    #[must_use]
    pub fn into_inner(self) -> Cow<'lt> {
        self.codeword
    }
}

impl Deref for Codeword<'_> {
    type Target = [u8];

    fn deref(&self) -> &Self::Target {
        &self.codeword[self.range.clone()]
    }
}

impl<'lt> From<Cow<'lt>> for Codeword<'lt> {
    fn from(value: Cow<'lt>) -> Self {
        let range = 0..value.len();
        let codeword = value;

        Self { codeword, range }
    }
}

impl<'lt> From<&'lt [u8]> for Codeword<'lt> {
    fn from(value: &'lt [u8]) -> Self {
        let range = 0..value.len();
        let codeword = value.into();

        Self { codeword, range }
    }
}

impl From<Buffer> for Codeword<'_> {
    fn from(value: Buffer) -> Self {
        let range = 0..value.len();
        let codeword = value.into();

        Self { codeword, range }
    }
}

impl From<SharedBuffer> for Codeword<'_> {
    fn from(value: SharedBuffer) -> Self {
        let range = 0..value.len();
        let codeword = value.into();

        Self { codeword, range }
    }
}

impl AsRef<[u8]> for Codeword<'_> {
    fn as_ref(&self) -> &[u8] {
        self
    }
}