mtots 0.1.2

The mtots scripting language
Documentation
use super::*;

pub struct Mesh(ggez::graphics::Mesh);

impl ConvertValue for Mesh {}

impl Mesh {
    pub fn get(&self) -> &ggez::graphics::Mesh {
        &self.0
    }
}

pub struct MeshBuilder(Option<ggez::graphics::MeshBuilder>);

impl MeshBuilder {
    pub fn new() -> Self {
        Self(Some(ggez::graphics::MeshBuilder::new()))
    }
    pub fn get_mut(&mut self) -> Result<&mut ggez::graphics::MeshBuilder> {
        match self.0.as_mut() {
            Some(mb) => Ok(mb),
            None => Err(rterr!("This MeshBuilder is already exhausted")),
        }
    }
    pub fn transfer(&mut self) -> Result<ggez::graphics::MeshBuilder> {
        match std::mem::replace(&mut self.0, None) {
            Some(mb) => Ok(mb),
            None => Err(rterr!("This MeshBuilder is already exhausted")),
        }
    }
    pub fn build(&mut self, ctx: &mut ggez::Context) -> Result<Mesh> {
        let builder = self.transfer()?;
        let mesh = mtry!(builder.build(ctx));
        Ok(Mesh(mesh))
    }
}

impl TryFrom<MeshBuilder> for ggez::graphics::MeshBuilder {
    type Error = Error;
    fn try_from(mut mb: MeshBuilder) -> Result<Self> {
        mb.transfer()
    }
}