1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
use byteorder::{ReadBytesExt, WriteBytesExt}; use std::io; use std::io::{Read, Write}; use {Endian, PreliminaryTryFrom, WithFixedPayloadLength}; #[repr(u16)] #[derive(Clone, Debug, PartialEq)] pub enum JobSetInfo { ParameterCount = 0x0000, JobCount = 0x0001, InstructionChunkCount = 0x0002, JobState = 0x0003, ActiveJobIndex = 0x0004, } impl WithFixedPayloadLength for JobSetInfo { const FIXED_PAYLOAD_LENGTH: u16 = u16::FIXED_PAYLOAD_LENGTH; } impl PreliminaryTryFrom<u16> for JobSetInfo { type Error = io::Error; fn try_from(value: u16) -> io::Result<Self> { match value { 0x0000 => Ok(JobSetInfo::ParameterCount), 0x0001 => Ok(JobSetInfo::JobCount), 0x0002 => Ok(JobSetInfo::InstructionChunkCount), 0x0003 => Ok(JobSetInfo::JobState), 0x0004 => Ok(JobSetInfo::ActiveJobIndex), _ => Err(io::Error::new( io::ErrorKind::InvalidData, format!("Invalid JobSetInfo enum value {}", value), )), } } } pub(crate) trait JobSetInfoWriterExt: Write { fn write_job_set_info( &mut self, job_set_info: &JobSetInfo, ) -> io::Result<()> { self.write_u16::<Endian>(job_set_info.clone() as u16)?; Ok(()) } } impl<B: Write + ?Sized> JobSetInfoWriterExt for B {} pub(crate) trait JobSetInfoReaderExt: Read { fn read_job_set_info(&mut self) -> io::Result<JobSetInfo> { let value = self.read_u16::<Endian>()?; JobSetInfo::try_from(value) } } impl<B: Read + ?Sized> JobSetInfoReaderExt for B {}