reactive_graph_graph/instances/properties/
property_hash.rs

1use serde_json::Value;
2use std::hash::Hash;
3use std::hash::Hasher;
4
5/// Wrapper for JSON values which allows to create a hash of the value.
6/// This enables implementing Hash for property instances.
7pub struct HashableValue<'a>(pub &'a Value);
8
9impl Hash for HashableValue<'_> {
10    fn hash<H: Hasher>(&self, state: &mut H) {
11        match &self.0 {
12            Value::Null => 0.hash(state),
13            Value::Bool(b) => b.hash(state),
14            Value::Number(n) => n.hash(state),
15            Value::String(str) => str.hash(state),
16            Value::Array(arr) => arr.iter().for_each(|a| HashableValue(a).hash(state)),
17            Value::Object(obj) => obj.iter().for_each(|entry| {
18                entry.0.hash(state);
19                HashableValue(entry.1).hash(state);
20            }),
21        }
22    }
23}