1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#[derive(serde::Deserialize, Debug, PartialEq, Default, Clone, serde::Serialize)]
pub struct Event {
pub name: String, pub action: Action,
}
pub(crate) fn group_by_js_event(evts: &[Event]) -> std::collections::HashMap<String, String> {
let mut events: std::collections::HashMap<String, Vec<Action>> = Default::default();
for event in evts {
if let Some(actions) = events.get_mut(&event.name) {
actions.push(event.action.to_owned());
} else {
events.insert(event.name.to_string(), vec![event.action.to_owned()]);
}
}
let mut string_events: std::collections::HashMap<String, String> = Default::default();
for (k, v) in events {
string_events.insert(k, serde_json::to_string(&v).expect(""));
}
string_events
}
#[derive(serde::Deserialize, Clone, Debug, serde::Serialize, PartialEq, Default)]
pub struct Action {
pub action: String, pub target: String, pub parameters: ftd::Map<Vec<ParameterData>>,
}
#[derive(serde::Deserialize, Clone, Debug, serde::Serialize, PartialEq, Default)]
pub struct ParameterData {
pub value: serde_json::Value,
pub reference: Option<String>,
}