From 7658b0472d4b357436a240d9de5fd12bc8d41c1b Mon Sep 17 00:00:00 2001 From: Mathieu Dutour Sikiric Date: Tue, 8 Jul 2025 15:39:54 +0200 Subject: [PATCH] Some correction to the case of missing key. --- serde-generate/src/analyzer.rs | 5 ++++- serde-generate/src/solidity.rs | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/serde-generate/src/analyzer.rs b/serde-generate/src/analyzer.rs index 5bf98a1fe..87008d22a 100644 --- a/serde-generate/src/analyzer.rs +++ b/serde-generate/src/analyzer.rs @@ -45,7 +45,7 @@ pub fn get_dependency_map_with_external_dependencies<'a>( /// Classic topological sorting algorithm except that it doesn't abort in case of cycles. pub fn best_effort_topological_sort(children: &BTreeMap>) -> Vec where - T: Clone + std::cmp::Ord + std::cmp::Eq + std::hash::Hash, + T: Clone + std::fmt::Debug + std::cmp::Ord + std::cmp::Eq + std::hash::Hash, { // Build the initial queue so that we pick up nodes with less children first (and otherwise // those with smaller key first). @@ -81,6 +81,9 @@ where // 2. Schedule all the (yet unseen) children then this node for a second visit. // (If possible, visit children by increasing key.) queue.push(node.clone()); + if !children.contains_key(&node) { + panic!("The node {:?} is missing", node); + } for child in children[&node].iter().rev() { if !seen.contains(child) { queue.push(child.clone()); diff --git a/serde-generate/src/solidity.rs b/serde-generate/src/solidity.rs index 4d18c07e3..cb8b39929 100644 --- a/serde-generate/src/solidity.rs +++ b/serde-generate/src/solidity.rs @@ -1210,7 +1210,11 @@ impl SolRegistry { loop { let mut new_level = HashSet::new(); for key in level { - for depend in self.names.get(&key).unwrap().get_dependency() { + let name = self.names.get(&key); + let Some(name) = name else { + panic!("The key {key:?} is absent from the list of names"); + }; + for depend in name.get_dependency() { if depend == *start_key { return true; }