use crate::event::EventResult;
use crate::message_processor::MessageProcessor;
pub fn apply_event_result(processor: &mut MessageProcessor, result: EventResult) -> Option<String> {
match result {
EventResult::Action {
want_response,
response_path,
..
} => {
if want_response {
let surface_id = processor
.model
.surfaces()
.next()
.map(|s| s.id.clone());
if let Some(sid) = surface_id {
let action_id = uuid::Uuid::new_v4().to_string();
let _ = processor.register_action(&sid, &action_id, response_path.clone());
}
response_path
} else {
None
}
}
EventResult::DataUpdate { path, value } => {
if let Some(surface) = processor.model.surfaces_mut().next() {
surface.data_model.borrow_mut().set(&path, value);
}
None
}
EventResult::Toggle { path } => {
if let Some(surface) = processor.model.surfaces_mut().next() {
let current = surface
.data_model
.borrow()
.get(&path)
.and_then(|v| v.as_bool())
.unwrap_or(false);
surface
.data_model
.borrow_mut()
.set(&path, serde_json::json!(!current));
}
None
}
EventResult::Consumed => None,
}
}