use askama::Template;
pub trait ItemComponent {
fn serialize(&self) -> String;
}
#[derive(Template)]
#[template(
path = "item_serialization/components/damage.json.jinja2",
escape = "none"
)]
struct ItemDamageComponentTemplate {
value: i32,
}
pub struct ItemDamageComponent {
pub value: i32,
}
impl ItemComponent for ItemDamageComponent {
fn serialize(&self) -> String {
let value = self.value;
let val = ItemDamageComponentTemplate { value: value }
.render()
.unwrap();
val
}
}
#[derive(Template)]
#[template(
path = "item_serialization/components/display_name.json.jinja2",
escape = "none"
)]
struct ItemDisplayNameComponentTemplate<'a> {
value: &'a str,
}
pub struct ItemDisplayNameComponent<'a> {
pub value: &'a str,
}
impl<'a> ItemComponent for ItemDisplayNameComponent<'a> {
fn serialize(&self) -> String {
let value = self.value;
let val: String = ItemDisplayNameComponentTemplate { value: value }
.render()
.unwrap();
val
}
}
#[derive(Template)]
#[template(
path = "item_serialization/components/icon.json.jinja2",
escape = "none"
)]
struct ItemIconComponentTemplate<'a> {
texture: &'a str,
}
pub struct ItemIconComponent<'a> {
pub texture: &'a str,
}
impl<'a> ItemComponent for ItemIconComponent<'a> {
fn serialize(&self) -> String {
let value = self.texture;
let val: String = ItemIconComponentTemplate { texture: value }
.render()
.unwrap();
val
}
}
#[derive(Template)]
#[template(
path = "item_serialization/components/fuel.json.jinja2",
escape = "none"
)]
struct ItemFuelComponentTemplate {
duration: i32,
}
pub struct ItemFuelComponent {
pub duration: i32,
}
impl ItemComponent for ItemFuelComponent {
fn serialize(&self) -> String {
let value = self.duration;
let val: String = ItemFuelComponentTemplate { duration: value }
.render()
.unwrap();
val
}
}
#[derive(Template)]
#[template(
path = "item_serialization/components/hand_equipped.json.jinja2",
escape = "none"
)]
struct ItemHandEquippedComponentTemplate {
value: bool,
}
pub struct ItemHandEquippedComponent {
pub value: bool,
}
impl ItemComponent for ItemHandEquippedComponent {
fn serialize(&self) -> String {
let value = self.value;
let val: String = ItemHandEquippedComponentTemplate { value: value }
.render()
.unwrap();
val
}
}
#[derive(Template)]
#[template(
path = "item_serialization/components/allow_off_hand.json.jinja2",
escape = "none"
)]
struct ItemAllowOffHandComponentTemplate {
value: bool,
}
pub struct ItemAllowOffHandComponent {
pub value: bool,
}
impl ItemComponent for ItemAllowOffHandComponent {
fn serialize(&self) -> String {
let value = self.value;
let val: String = ItemAllowOffHandComponentTemplate { value: value }
.render()
.unwrap();
val
}
}
#[derive(Template)]
#[template(
path = "item_serialization/components/max_stack_value.json.jinja2",
escape = "none"
)]
struct ItemMaxStackValueComponentTemplate {
value: bool,
}
pub struct ItemMaxStackValueComponent {
pub value: bool,
}
impl ItemComponent for ItemMaxStackValueComponent {
fn serialize(&self) -> String {
let value = self.value;
let val: String = ItemMaxStackValueComponentTemplate { value: value }
.render()
.unwrap();
val
}
}
#[derive(Template)]
#[template(
path = "item_serialization/components/durability.json.jinja2",
escape = "none"
)]
struct ItemDurabilityComponentTemplate {
min_chance: i32,
max_chance: i32,
durability: i32,
}
pub struct ItemDurabilityComponent {
min_chance: i32,
max_chance: i32,
durability: i32,
}
impl ItemComponent for ItemDurabilityComponent {
fn serialize(&self) -> String {
let value = self.durability;
let min_c = self.min_chance;
let max_c = self.max_chance;
let val: String = ItemDurabilityComponentTemplate {
max_chance: max_c,
min_chance: min_c,
durability: value,
}
.render()
.unwrap();
val
}
}
#[derive(Template)]
#[template(
path = "item_serialization/components/armor.json.jinja2",
escape = "none"
)]
struct ItemArmorComponentTemplate {
protection: i32,
}
pub struct ItemArmorComponent {
pub protection: i32,
}
impl ItemComponent for ItemArmorComponent {
fn serialize(&self) -> String {
let value = self.protection;
let val: String = ItemArmorComponentTemplate { protection: value }
.render()
.unwrap();
val
}
}
#[derive(Template)]
#[template(
path = "item_serialization/components/render_offsets.json.jinja2",
escape = "none"
)]
struct ItemRenderOffsetsComponentTemplate<'a> {
value: &'a str,
}
pub struct ItemRenderOffsetsComponent<'a> {
pub value: &'a str,
}
impl<'a> ItemComponent for ItemRenderOffsetsComponent<'a> {
fn serialize(&self) -> String {
let value = self.value;
let val: String = ItemRenderOffsetsComponentTemplate { value }
.render()
.unwrap();
val
}
}
#[derive(Template)]
#[template(
path = "item_serialization/components/creative_category.json.jinja2",
escape = "none"
)]
struct ItemCreativeCategoryComponentTemplate<'a> {
parent: &'a str,
}
pub struct ItemCreativeCategoryComponent<'a> {
pub parent: &'a str,
}
impl<'a> ItemComponent for ItemCreativeCategoryComponent<'a> {
fn serialize(&self) -> String {
let parent = self.parent;
let val: String = ItemCreativeCategoryComponentTemplate { parent }
.render()
.unwrap();
val
}
}
#[derive(Template)]
#[template(
path = "item_serialization/components/item_repair_entry.json.jinja2",
escape = "none"
)]
struct ItemRepairEntryTemplate<'a> {
items: String,
amount: &'a String,
}
pub struct ItemRepairEntry<'a> {
pub items: Vec<&'a str>,
pub amount: String,
}
impl<'a> ItemRepairEntry<'a> {
pub fn serialize(&self) -> String {
let items = format!("{:?}", self.items);
let amount = &self.amount;
let val: String = ItemRepairEntryTemplate { items, amount }.render().unwrap();
val
}
}
fn serialize_item_repairable_entries(repair_entries: &Vec<ItemRepairEntry>) -> String {
let mut serialized_entries = String::new();
for entry in repair_entries {
serialized_entries.push_str(&entry.serialize());
serialized_entries.push_str(",");
}
serialized_entries.pop();
serialized_entries
}
#[derive(Template)]
#[template(
path = "item_serialization/components/repairable.json.jinja2",
escape = "none"
)]
struct ItemRepairableComponentTemplate {
repair_entries: String,
}
pub struct ItemRepairableComponent<'a> {
pub repair_entries: Vec<ItemRepairEntry<'a>>,
}
impl<'a> ItemComponent for ItemRepairableComponent<'a> {
fn serialize(&self) -> String {
let repair_entries = &self.repair_entries;
let val: String = ItemRepairableComponentTemplate {
repair_entries: serialize_item_repairable_entries(repair_entries),
}
.render()
.unwrap();
val
}
}
#[derive(Template)]
#[template(
path = "item_serialization/components/custom_components.json.jinja2",
escape = "none"
)]
pub struct ItemCustomComponentsTemplate {
pub components: String,
}
pub struct ItemCustomComponents<'a> {
pub components: Vec<&'a str>,
}
impl<'a> ItemComponent for ItemCustomComponents<'a> {
fn serialize(&self) -> String {
let components = format!("{:?}", self.components);
let val: String = ItemCustomComponentsTemplate { components }
.render()
.unwrap();
val
}
}