rxlsb 0.1.0

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

pub struct StylesRegistry;

impl StylesRegistry {
    pub fn new() -> Self { Self }
    
    pub fn serialize(&self) -> Result<Bytes> {
        let mut writer = BufferWriter::new(2048);
        
        writer.write_varint(RecordType::BrtBeginCellStyleXFs.to_u32());
        writer.write_varsize(0);
        
        Self::write_formats(&mut writer)?;
        Self::write_fonts(&mut writer)?;
        Self::write_fills(&mut writer)?;
        Self::write_borders(&mut writer)?;
        Self::write_xfs(&mut writer)?;
        Self::write_styles(&mut writer)?;
        
        writer.write_varint(RecordType::BrtEndCellStyleXFs.to_u32());
        writer.write_varsize(0);
        
        Ok(writer.freeze())
    }
    
    fn write_formats(writer: &mut BufferWriter) -> Result<()> {
        writer.write_varint(RecordType::BrtBeginFmts.to_u32());
        writer.write_varsize(4);
        writer.write_u32_le(0);
        
        writer.write_varint(RecordType::BrtEndFmts.to_u32());
        writer.write_varsize(0);
        Ok(())
    }
    
    fn write_fonts(writer: &mut BufferWriter) -> Result<()> {
        writer.write_varint(RecordType::BrtBeginFonts.to_u32());
        writer.write_varsize(4);
        writer.write_u32_le(1);
        
        writer.write_varint(RecordType::BrtFont.to_u32());
        writer.write_varsize(29);
        writer.write_bytes(&[
            0xDC, 0x00, 0x00, 0x00,
            0x90, 0x01, 0x00, 0x00,
            0x00, 0x00,
            0x86, 0x00,
            0x07, 0x01,
            0x00, 0x00, 0x00, 0x00, 0x00,
            0xFF,
            0x02, 0x02, 0x00, 0x00, 0x00,
            0x8B, 0x5B, 0x53, 0x4F
        ]);
        
        writer.write_varint(RecordType::BrtEndFonts.to_u32());
        writer.write_varsize(0);
        Ok(())
    }
    
    fn write_fills(writer: &mut BufferWriter) -> Result<()> {
        writer.write_varint(RecordType::BrtBeginFills.to_u32());
        writer.write_varsize(4);
        writer.write_u32_le(2);
        
        writer.write_varint(RecordType::BrtFill.to_u32());
        writer.write_varsize(4);
        writer.write_bytes(&[0x00, 0x00, 0x00, 0x00]);
        
        writer.write_varint(RecordType::BrtFill.to_u32());
        writer.write_varsize(4);
        writer.write_bytes(&[0x02, 0x00, 0x80, 0x00]);
        
        writer.write_varint(RecordType::BrtEndFills.to_u32());
        writer.write_varsize(0);
        Ok(())
    }
    
    fn write_borders(writer: &mut BufferWriter) -> Result<()> {
        writer.write_varint(RecordType::BrtBeginBorders.to_u32());
        writer.write_varsize(4);
        writer.write_u32_le(1);
        
        writer.write_varint(RecordType::BrtBorder.to_u32());
        writer.write_varsize(24);
        writer.write_bytes(&[0u8; 24]);
        
        writer.write_varint(RecordType::BrtEndBorders.to_u32());
        writer.write_varsize(0);
        Ok(())
    }
    
    fn write_xfs(writer: &mut BufferWriter) -> Result<()> {
        writer.write_varint(RecordType::BrtBeginXFs.to_u32());
        writer.write_varsize(4);
        writer.write_u32_le(1);
        
        writer.write_varint(RecordType::BrtXF.to_u32());
        writer.write_varsize(16);
        writer.write_bytes(&[
            0xFF, 0xFF, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00,
            0x08, 0x10, 0x00, 0x00
        ]);
        
        writer.write_varint(RecordType::BrtEndXFs.to_u32());
        writer.write_varsize(0);
        Ok(())
    }
    
    fn write_styles(writer: &mut BufferWriter) -> Result<()> {
        writer.write_varint(RecordType::BrtBeginStyles.to_u32());
        writer.write_varsize(4);
        writer.write_u32_le(2);
        
        writer.write_varint(RecordType::BrtXF.to_u32());
        writer.write_varsize(16);
        writer.write_bytes(&[
            0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00,
            0x08, 0x10, 0x00, 0x00
        ]);
        
        writer.write_varint(RecordType::BrtXF.to_u32());
        writer.write_varsize(16);
        writer.write_bytes(&[
            0x00, 0x00, 0x16, 0x00,
            0x00, 0x00, 0x00, 0x00,
            0x00, 0x00, 0x00, 0x00,
            0x08, 0x10, 0x01, 0x00
        ]);
        
        writer.write_varint(RecordType::BrtEndStyles.to_u32());
        writer.write_varsize(0);
        Ok(())
    }
}