dreamwell-engine 1.0.0

Dreamwell pure-logic engine library — transforms, hierarchy, canon pipeline, spatial math, hashing, tile rules, validation, waymark schema, material/lighting descriptors. No SpacetimeDB dependency.
Documentation
use super::properties::PropertyAssignment;
use serde::{Deserialize, Serialize};

/// Semantic binding — tag and property bindings for an emitter or entity.
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct SemanticBinding {
    pub trait_tags: Vec<String>,
    pub signal_tags: Vec<String>,
    pub receiver_tags: Vec<String>,
    pub property_defaults: Vec<PropertyAssignment>,
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn semantic_binding_default() {
        let sb = SemanticBinding::default();
        assert!(sb.trait_tags.is_empty());
    }

    #[test]
    fn semantic_binding_serde() {
        let sb = SemanticBinding {
            trait_tags: vec!["isDebris".into(), "isStone".into()],
            signal_tags: vec!["signal.fractured".into()],
            receiver_tags: vec!["receive.force".into()],
            property_defaults: vec![],
        };
        let json = serde_json::to_string(&sb).unwrap();
        let restored: SemanticBinding = serde_json::from_str(&json).unwrap();
        assert_eq!(restored.trait_tags.len(), 2);
    }
}