rxlsb 0.2.0

Pure Rust XLSB (Excel Binary Workbook) reader/writer library
Documentation
use crate::io::BufferReader;
use crate::format::RecordType;
use crate::data::SheetInfo;
use crate::error::Result;
use bytes::Bytes;

pub struct WorkbookReader {
    sheets: Vec<SheetInfo>,
}

impl WorkbookReader {
    #[allow(dead_code)]
    pub fn new() -> Self {
        Self { sheets: vec![] }
    }
    
    pub fn deserialize(data: Bytes) -> Result<Self> {
        let mut reader = BufferReader::new(data);
        let mut sheets = vec![];
        
        while reader.has_remaining() {
            let record_type_code = reader.read_varint()?;
            let size = reader.read_varsize()?;
            
            let record_type = RecordType::from_u32(record_type_code);
            
            match record_type {
                Some(RecordType::BrtBeginBook) => {
                }
                
                Some(RecordType::BrtBundleSh) => {
                    reader.skip(8)?;
                    let _rel_id = reader.read_wide_string_u32()?;
                    let name = reader.read_wide_string_u32()?;
                    let index = sheets.len();
                    sheets.push(SheetInfo { index, name });
                }
                
                Some(RecordType::BrtEndBook) => {
                    break;
                }
                
                _ => {
                    reader.skip(size as usize)?;
                }
            }
        }
        
        Ok(Self { sheets })
    }
    
    pub fn get_sheet_infos(&self) -> &[SheetInfo] {
        &self.sheets
    }
    
    pub fn sheet_count(&self) -> usize {
        self.sheets.len()
    }
}