primase_core/
material_usage.rs1use serde::Serialize;
4use serde_json::Value;
5
6use crate::{Component, JsonError};
7
8#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize)]
14#[serde(rename_all = "snake_case")]
15pub enum MaterialUsage {
16 Foliage,
18 Water,
20}
21
22impl Component for MaterialUsage {
23 const NAME: &'static str = "core.material_usage";
24 const GEOMETRY: crate::Geometry = crate::Geometry::None;
25 fn to_json(&self) -> Result<Option<Value>, JsonError> {
26 crate::json::to_value(self).map(Some)
27 }
28}
29
30#[cfg(test)]
31mod tests {
32 use super::*;
33 use crate::World;
34
35 #[test]
36 fn a_usage_shows_by_its_name() {
37 let mut w = World::new();
38 let leaves = w.spawn();
39 w.insert(leaves, MaterialUsage::Foliage);
40 let sea = w.spawn();
41 w.insert(sea, MaterialUsage::Water);
42 assert_eq!(
43 w.get::<MaterialUsage>(leaves).unwrap().to_json().unwrap(),
44 Some(serde_json::json!("foliage"))
45 );
46 assert_eq!(
47 w.get::<MaterialUsage>(sea).unwrap().to_json().unwrap(),
48 Some(serde_json::json!("water"))
49 );
50 }
51}