pmx_parser 0.2.0

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

use crate::bone::Bones;
use crate::display_frame::DisplayFrames;
use crate::element_index::ElementIndices;
use crate::error::PmxError;
use crate::header::Header;
use crate::joint::Joints;
use crate::material::Materials;
use crate::model_info::ModelInfo;
use crate::morph::Morphs;
use crate::rigid_body::RigidBodies;
use crate::soft_body::SoftBodies;
use crate::texture::Textures;
use crate::vertex::Vertices;

#[derive(Default, Debug, PartialEq, Clone)]
pub struct Pmx {
    pub info: ModelInfo,
    pub vertices: Vertices,
    pub elements: ElementIndices,
    pub textures: Textures,
    pub materials: Materials,
    pub bones: Bones,
    pub morphs: Morphs,
    pub display_frames: DisplayFrames,
    pub rigid_bodies: RigidBodies,
    pub joints: Joints,
    pub soft_bodies: SoftBodies,
}

impl Pmx {
    pub fn read<R: Read>(header: &Header, read: &mut R) -> Result<Self, PmxError> {
        Ok(Self {
            info: ModelInfo::read(header, read)?,
            vertices: Vertices::read(header, read)?,
            elements: ElementIndices::read(header, read)?,
            textures: Textures::read(header, read)?,
            materials: Materials::read(header, read)?,
            bones: Bones::read(header, read)?,
            morphs: Morphs::read(header, read)?,
            display_frames: DisplayFrames::read(header, read)?,
            rigid_bodies: RigidBodies::read(header, read)?,
            joints: Joints::read(header, read)?,
            soft_bodies: SoftBodies::read(header, read)?,
        })
    }

    pub fn write<W: Write>(&self, header: &Header, write: &mut W) -> Result<(), PmxError> {
        self.info.write(header, write)?;
        self.vertices.write(header, write)?;
        self.elements.write(header, write)?;
        self.textures.write(header, write)?;
        self.materials.write(header, write)?;
        self.bones.write(header, write)?;
        self.morphs.write(header, write)?;
        self.display_frames.write(header, write)?;
        self.rigid_bodies.write(header, write)?;
        self.joints.write(header, write)?;
        self.soft_bodies.write(header, write)?;
        Ok(())
    }
}