reactive_graph_std_object/behaviour/entity/
remove_property.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 uuid::Uuid;
8
9use reactive_graph_std_object_model::ObjectRemovePropertyProperties::OBJECT;
10use reactive_graph_std_object_model::ObjectRemovePropertyProperties::PROPERTY_NAME;
11use reactive_graph_std_result_model::ResultAnyProperties::RESULT;
12
13entity_behaviour!(
14 ObjectRemoveProperty,
15 ObjectRemovePropertyFactory,
16 ObjectRemovePropertyFsm,
17 ObjectRemovePropertyBehaviourTransitions,
18 ObjectRemovePropertyValidator
19);
20
21behaviour_validator!(ObjectRemovePropertyValidator, Uuid, ReactiveEntity, OBJECT.as_ref(), RESULT.as_ref(), PROPERTY_NAME.as_ref());
22
23impl BehaviourInit<Uuid, ReactiveEntity> for ObjectRemovePropertyBehaviourTransitions {
24 fn init(&self) -> Result<(), BehaviourInitializationFailed> {
25 if let Some(mut object) = self.reactive_instance.as_object(OBJECT) {
26 if let Some(property_name) = self.reactive_instance.as_string(PROPERTY_NAME) {
27 object.remove(&property_name);
28 self.reactive_instance.set(RESULT, Value::Object(object));
29 }
30 }
31 Ok(())
32 }
33}
34
35impl BehaviourConnect<Uuid, ReactiveEntity> for ObjectRemovePropertyBehaviourTransitions {
36 fn connect(&self) -> Result<(), BehaviourConnectFailed> {
37 let reactive_instance = self.reactive_instance.clone();
38 self.property_observers.observe_with_handle(OBJECT.as_ref(), move |object: &Value| {
39 if let Some(mut object) = object.as_object().cloned() {
40 if let Some(property_name) = reactive_instance.as_string(PROPERTY_NAME) {
41 object.remove(&property_name);
42 reactive_instance.set(RESULT, Value::Object(object));
43 }
44 }
45 });
46 let reactive_instance = self.reactive_instance.clone();
47 self.property_observers
48 .observe_with_handle(PROPERTY_NAME.as_ref(), move |property_name: &Value| {
49 if let Some(property_name) = property_name.as_str().map(String::from) {
50 if let Some(mut object) = reactive_instance.as_object(OBJECT) {
51 object.remove(&property_name);
52 reactive_instance.set(RESULT, Value::Object(object));
53 }
54 }
55 });
56 Ok(())
57 }
58}
59
60impl BehaviourShutdown<Uuid, ReactiveEntity> for ObjectRemovePropertyBehaviourTransitions {}
61impl BehaviourTransitions<Uuid, ReactiveEntity> for ObjectRemovePropertyBehaviourTransitions {}