reactive_graph_std_object/behaviour/entity/
keys.rs1use reactive_graph_behaviour_model_api::behaviour_validator;
2use reactive_graph_behaviour_model_api::prelude::*;
3use reactive_graph_behaviour_model_impl::entity_behaviour;
4use reactive_graph_graph::prelude::*;
5use reactive_graph_reactive_model_impl::ReactiveEntity;
6use serde_json::Value;
7use serde_json::json;
8use uuid::Uuid;
9
10use reactive_graph_std_object_model::ObjectKeysProperties::KEYS;
11use reactive_graph_std_object_model::ObjectKeysProperties::OBJECT;
12
13entity_behaviour!(ObjectKeys, ObjectKeysFactory, ObjectKeysFsm, ObjectKeysBehaviourTransitions, ObjectKeysValidator);
14
15behaviour_validator!(ObjectKeysValidator, Uuid, ReactiveEntity, OBJECT.as_ref(), KEYS.as_ref());
16
17impl BehaviourInit<Uuid, ReactiveEntity> for ObjectKeysBehaviourTransitions {
18 fn init(&self) -> Result<(), BehaviourInitializationFailed> {
19 if let Some(object) = self.reactive_instance.get(OBJECT) {
20 if let Some(object) = object.as_object() {
21 self.reactive_instance.set(KEYS, json!(Vec::from_iter(object.keys())));
22 }
23 }
24 Ok(())
25 }
26}
27
28impl BehaviourConnect<Uuid, ReactiveEntity> for ObjectKeysBehaviourTransitions {
29 fn connect(&self) -> Result<(), BehaviourConnectFailed> {
30 let reactive_instance = self.reactive_instance.clone();
31 self.property_observers.observe_with_handle(OBJECT.as_ref(), move |object: &Value| {
32 if let Some(object) = object.as_object() {
33 reactive_instance.set(KEYS, json!(Vec::from_iter(object.keys())));
34 }
35 });
36 Ok(())
37 }
38}
39
40impl BehaviourShutdown<Uuid, ReactiveEntity> for ObjectKeysBehaviourTransitions {}
41impl BehaviourTransitions<Uuid, ReactiveEntity> for ObjectKeysBehaviourTransitions {}