Skip to main content

dreamwell_engine/physics/
semantic_binding.rs

1use super::properties::PropertyAssignment;
2use serde::{Deserialize, Serialize};
3
4/// Semantic binding — tag and property bindings for an emitter or entity.
5#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6pub struct SemanticBinding {
7    pub trait_tags: Vec<String>,
8    pub signal_tags: Vec<String>,
9    pub receiver_tags: Vec<String>,
10    pub property_defaults: Vec<PropertyAssignment>,
11}
12
13#[cfg(test)]
14mod tests {
15    use super::*;
16
17    #[test]
18    fn semantic_binding_default() {
19        let sb = SemanticBinding::default();
20        assert!(sb.trait_tags.is_empty());
21    }
22
23    #[test]
24    fn semantic_binding_serde() {
25        let sb = SemanticBinding {
26            trait_tags: vec!["isDebris".into(), "isStone".into()],
27            signal_tags: vec!["signal.fractured".into()],
28            receiver_tags: vec!["receive.force".into()],
29            property_defaults: vec![],
30        };
31        let json = serde_json::to_string(&sb).unwrap();
32        let restored: SemanticBinding = serde_json::from_str(&json).unwrap();
33        assert_eq!(restored.trait_tags.len(), 2);
34    }
35}