use std::io::Read;
use bstr::BString;
use crate::pcboard::FROM_TO_LEN;
#[derive(Clone, Debug)]
pub struct PCBoardMessageIndex {
pub offset: i32,
pub num: u32,
pub to: BString,
pub from: BString,
pub status: u8,
pub date: u16,
pub reserved: [u8; 3],
}
impl PCBoardMessageIndex {
pub const HEADER_SIZE: usize = 4 + 4 + 25 + 25 + 1 + 2 + 3;
pub fn read<R: Read>(file: &mut R) -> crate::Result<Self> {
let data = &mut [0; Self::HEADER_SIZE];
file.read_exact(data)?;
let mut data = &data[..];
convert_u32!(offset, data);
convert_u32!(num, data);
convert_to_string!(to, data, FROM_TO_LEN);
convert_to_string!(from, data, FROM_TO_LEN);
convert_u8!(status, data);
convert_u16!(date, data);
let reserved = [data[0], data[1], data[2]];
Ok(Self {
offset: offset as i32,
num,
to,
from,
status,
date,
reserved,
})
}
}