violet_crystal 0.1.1

Rust-powered addon development framework for Minecraft Bedrock
Documentation
use std::sync::Mutex;

use askama::Template;
use crate::vio::Identifier;

pub mod component;
pub mod item_registry;

#[derive(Clone)]
pub struct Item<'a> {
    pub type_id: Identifier<'a>,
    pub components: Vec<&'a dyn component::ItemComponent>,
}
impl<'a> Item<'a> {
    pub fn serialize(&self) -> String {
        let components = self.components.clone();
        let mut components_strings: Vec<String> = vec![];
        for component in components {
            let comp = Mutex::new(component);
            let ser = comp.lock();
            let mut fser = match ser {
                Ok(guard) => guard.serialize(),
                Err(_) => "Error serializing".to_string(),
            };
            fser.push(',');
            components_strings.push(fser);
        }
        components_strings.last_mut().unwrap().pop();
        ItemTemplate {
            id: &self.type_id.render(),
            components: components_strings,
        }
        .render()
        .unwrap()
    }
}

#[derive(Template)]
#[template(path = "item_serialization/item_template.json.jinja2", escape = "none")]
struct ItemTemplate<'a> {
    pub id: &'a str,
    pub components: Vec<String>,
}

#[derive(Template)]
#[template(path = "item_serialization/item_texture.json.jinja2", escape = "none")]
pub struct ItemAtlasTemplate<'a> {
    pub name: &'a String,
    pub contents: String,
}