underworld_core 0.6.3

Small library to either play a game or assist in generating rooms
Documentation
#[cfg(feature = "bevy_components")]
use bevy_ecs::prelude::Component;
#[cfg(feature = "openapi")]
use poem_openapi::Enum;
#[cfg(feature = "serialization")]
use serde::{Deserialize, Serialize};
use strum_macros::EnumIter;

use super::{Tag, Tagged};

#[derive(Clone, Copy, Debug, PartialEq, Eq, EnumIter)]
#[cfg_attr(feature = "bevy_components", derive(Component))]
#[cfg_attr(
    feature = "serialization",
    derive(Deserialize, Serialize),
    serde(rename_all = "snake_case")
)]
#[cfg_attr(feature = "openapi", derive(Enum), oai(rename_all = "snake_case"))]
pub enum Material {
    Bone,
    Ceramic,
    Cotton,
    Fur,
    Glass,
    Gold,
    Hide,
    Iron,
    Leather,
    Linen,
    Paper,
    Papyrus,
    Silk,
    Steel,
    Stone,
    Wooden,
    Wool,
}

pub trait BuiltWithMaterial {
    fn possible_materials(&self) -> Vec<Material>;
}

impl Tagged for Material {
    fn tags(&self) -> Vec<Tag> {
        match *self {
            Material::Bone => vec![Tag::Bone],
            Material::Gold => vec![Tag::Metal],
            Material::Hide => vec![Tag::Leather],
            Material::Iron => vec![Tag::Metal],
            Material::Leather => vec![Tag::Leather],
            Material::Steel => vec![Tag::Metal],
            Material::Stone => vec![Tag::Stone],
            Material::Wooden => vec![Tag::Wood],
            Material::Cotton => vec![Tag::Cloth],
            Material::Fur => vec![Tag::Cloth],
            Material::Linen => vec![Tag::Cloth],
            Material::Silk => vec![Tag::Cloth],
            Material::Wool => vec![Tag::Cloth],
            Material::Paper => vec![Tag::Paper],
            Material::Papyrus => vec![Tag::Paper],
            Material::Ceramic => vec![Tag::Ceramic],
            Material::Glass => vec![Tag::Container],
        }
    }
}