use { crate::Error, std::io::{Read, Write}, }; #[derive(Debug)] pub struct Special { pub major: u32, pub minor: u32, } impl Special { pub fn read(reader: &mut T) -> Result { let mut buf = [0; 8]; reader.read_exact(&mut buf)?; let major: [u8; 4] = buf[..4].try_into()?; let major = u32::from_le_bytes(major); let minor: [u8; 4] = buf[4..].try_into()?; let minor = u32::from_le_bytes(minor); Ok(Self { major, minor }) } pub fn write(&self, writer: &mut T) -> Result<(), Error> { writer.write_all(&self.major.to_le_bytes())?; writer.write_all(&self.minor.to_le_bytes())?; Ok(()) } pub(super) fn from_rdev(rdev: u32) -> Self { Self { major: rdev >> 8, minor: rdev & 0xff, } } }