graphgate_schema/
value_ext.rs1use indexmap::IndexSet;
2use value::Value;
3
4pub trait ValueExt {
5 fn referenced_variables(&self) -> IndexSet<&str>;
6}
7
8impl ValueExt for Value {
9 fn referenced_variables(&self) -> IndexSet<&str> {
10 pub fn referenced_variables_to_set<'a>(value: &'a Value, vars: &mut IndexSet<&'a str>) {
11 match value {
12 Value::Variable(name) => {
13 vars.insert(name);
14 }
15 Value::List(values) => values
16 .iter()
17 .for_each(|value| referenced_variables_to_set(value, vars)),
18 Value::Object(obj) => obj
19 .values()
20 .for_each(|value| referenced_variables_to_set(value, vars)),
21 _ => {}
22 }
23 }
24
25 let mut vars = IndexSet::new();
26 referenced_variables_to_set(self, &mut vars);
27 vars
28 }
29}