scsir 0.3.0

A simple library for issuing SCSI commands
Documentation
use crate::command::get_array;

use super::{LogParameter, ParameterHeader};

#[derive(Clone, Debug)]
pub struct GeneralParameter {
    pub header: ParameterHeader,
    pub value: Vec<u8>,
}

impl LogParameter for GeneralParameter {
    fn new() -> Self {
        Self {
            header: ParameterHeader::new(),
            value: vec![],
        }
    }

    fn from_bytes(bytes: &[u8]) -> (Self, &[u8]) {
        let (array, bytes) = get_array(bytes);
        let header = ParameterHeader::from_bytes(array);
        let (value, bytes) =
            bytes.split_at(usize::min(bytes.len(), header.parameter_length() as usize));
        (
            Self {
                header,
                value: value.to_vec(),
            },
            bytes,
        )
    }

    fn to_bytes(&self) -> Vec<u8> {
        let mut bytes = vec![];
        bytes.extend_from_slice(&self.header.into_bytes());
        bytes.extend_from_slice(&self.value);

        bytes
    }
}