ignis 0.1.0

A library for editing various 3DSFE formats.
Documentation
use super::BinArchive;
use anyhow::Result;

pub struct BinArchiveWriter<'a> {
    archive: &'a mut BinArchive,
    position: usize
}

impl<'a> BinArchiveWriter<'a> {
    pub fn new(archive: &'a mut BinArchive, position: usize) -> Self {
        BinArchiveWriter {
            archive,
            position
        }
    }

    pub fn write_u8(&mut self, value: u8) -> Result<()> {
        self.archive.put_u8(self.position, value)?;
        self.position += 1;
        Ok(())
    }

    pub fn write_u16(&mut self, value: u16) -> Result<()> {
        self.archive.put_u16(self.position, value)?;
        self.position += 2;
        Ok(())
    }

    pub fn write_u32(&mut self, value: u32) -> Result<()> {
        self.archive.put_u32(self.position, value)?;
        self.position += 4;
        Ok(())
    }

    pub fn write_i8(&mut self, value: i8) -> Result<()> {
        self.write_u8(value as u8)
    }

    pub fn write_i16(&mut self, value: i16) -> Result<()> {
        self.write_u16(value as u16)
    }

    pub fn write_i32(&mut self, value: i32) -> Result<()> {
        self.write_u32(value as u32)
    }

    pub fn write_bytes(&mut self, value: &[u8]) -> Result<()> {
        for byte in value {
            self.write_u8(*byte)?;
        }
        Ok(())
    }

    pub fn write_f32(&mut self, value: f32) -> Result<()> {
        self.archive.put_f32(self.position, value)?;
        self.position += 4;
        Ok(())
    }

    pub fn write_string(&mut self, value: &Option<String>) -> Result<()> {
        self.archive.put_text(self.position, value.as_ref())?;
        self.position += 4;
        Ok(())
    }

    pub fn write_label(&mut self, value: &str) -> Result<()> {
        self.archive.put_label(self.position, value)
    }

    pub fn write_pointer(&mut self, value: usize) -> Result<()> {
        if value == 0 {
            self.archive.clear_pointer(self.position)?;
        } else {
            self.archive.put_pointer(self.position, value)?;
        }
        self.position += 4;
        Ok(())
    }
}