graphgate_schema/
value_ext.rs

1use 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}