diff --git a/crates/dmm-tools/src/dmm.rs b/crates/dmm-tools/src/dmm.rs index 58dadf60..5f2ab6c1 100644 --- a/crates/dmm-tools/src/dmm.rs +++ b/crates/dmm-tools/src/dmm.rs @@ -118,7 +118,6 @@ pub struct ZLevel<'a> { pub grid: ndarray::ArrayView<'a, Key, ndarray::Dim<[usize; 2]>>, } -// TODO: port to ast::Prefab #[derive(Debug, Default, Clone)] pub struct Prefab { pub path: String, @@ -128,7 +127,7 @@ pub struct Prefab { impl PartialEq for Prefab { fn eq(&self, other: &Self) -> bool { - self.path == other.path && self.vars.keys().eq(other.vars.keys()) + self.path == other.path && self.vars == other.vars } } @@ -137,7 +136,11 @@ impl Eq for Prefab {} impl std::hash::Hash for Prefab { fn hash(&self, state: &mut H) { self.path.hash(state); - self.vars.keys().for_each(|key| {key.hash(state)}); + let mut items: Vec<_> = self.vars.iter().collect(); + items.sort_by_key(|&(k, _)| k); + for kvp in items { + kvp.hash(state); + } } } diff --git a/crates/dreammaker/src/constants.rs b/crates/dreammaker/src/constants.rs index bfd7c30f..d4bb17bb 100644 --- a/crates/dreammaker/src/constants.rs +++ b/crates/dreammaker/src/constants.rs @@ -26,7 +26,7 @@ pub struct Pop { impl PartialEq for Pop { fn eq(&self, other: &Self) -> bool { - self.path == other.path && self.vars.keys().eq(other.vars.keys()) + self.path == other.path && self.vars == other.vars } } @@ -35,7 +35,11 @@ impl Eq for Pop {} impl std::hash::Hash for Pop { fn hash(&self, state: &mut H) { self.path.hash(state); - self.vars.keys().for_each(|key| {key.hash(state)}); + let mut items: Vec<_> = self.vars.iter().collect(); + items.sort_by_key(|&(k, _)| k); + for kvp in items { + kvp.hash(state); + } } }