darkomen 0.5.0

Warhammer: Dark Omen library and CLI in Rust
Documentation
use std::io::{Cursor, Read, Write};

use super::BlockError;

#[derive(Clone)]
#[cfg_attr(feature = "debug", derive(Debug))]
pub struct Pcm16Block {
    pub data: Vec<i16>,
}

impl Pcm16Block {
    pub fn from_bytes(bs: &[u8]) -> Result<Self, BlockError> {
        let mut data = Vec::with_capacity(bs.len() / 2);
        let mut buf = Cursor::new(bs);
        for _ in 0..bs.len() / 2 {
            let mut bytes = [0u8; 2];
            buf.read_exact(&mut bytes)?;
            data.push(i16::from_le_bytes(bytes));
        }
        Ok(Self { data })
    }

    pub fn from_int16_slice(data: &[i16]) -> Self {
        Self {
            data: data.to_vec(),
        }
    }

    pub fn to_bytes(&self) -> Result<Vec<u8>, BlockError> {
        let mut buf = Vec::with_capacity(self.data.len() * 2);
        for &v in &self.data {
            buf.write_all(&v.to_le_bytes())?;
        }
        Ok(buf)
    }
}