pmx_parser 0.2.0

load and save .pmx model file.
Documentation
use std::fmt::{Debug, Formatter};
use std::io::{Read, Write};

use byteorder::{LittleEndian, WriteBytesExt};

use crate::error::PmxError;
use crate::header::Header;
use crate::kits::read_vec;
use crate::VertexIndex;

#[derive(Default, Clone, Eq, PartialEq)]
pub struct ElementIndices {
    pub element_indices: Vec<VertexIndex>,
}

impl Debug for ElementIndices {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        let mut s = f.debug_struct("ElementIndices");
        s.field("count", &self.count());
        s.finish()
    }
}

impl ElementIndices {
    pub fn count(&self) -> u32 {
        self.element_indices.len() as u32
    }

    pub fn read<R: Read>(header: &Header, read: &mut R) -> Result<Self, PmxError> {
        Ok(Self {
            element_indices: read_vec(read, |read| header.vertex_index.read(read))?,
        })
    }

    pub fn write<W: Write>(&self, header: &Header, write: &mut W) -> Result<(), PmxError> {
        write.write_u32::<LittleEndian>(self.count())?;
        for i in &self.element_indices {
            header.vertex_index.write(write, *i)?;
        }
        Ok(())
    }
}