From c858b5fd1b9e377f1923061bfc0200be93377673 Mon Sep 17 00:00:00 2001 From: glihm Date: Tue, 13 Aug 2024 23:36:23 -0400 Subject: [PATCH] fix: ensure tokens are generated in lexicographic order --- crates/rs/src/lib.rs | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/crates/rs/src/lib.rs b/crates/rs/src/lib.rs index ea71785..1f9f288 100644 --- a/crates/rs/src/lib.rs +++ b/crates/rs/src/lib.rs @@ -169,13 +169,39 @@ pub fn abi_to_tokenstream( tokens.push(CairoContract::expand(contract_name.clone())); - for s in &abi_tokens.structs { + let mut sorted_structs = abi_tokens.structs.clone(); + sorted_structs.sort_by(|a, b| { + let a_name = a + .to_composite() + .expect("composite expected") + .type_name_or_alias(); + let b_name = b + .to_composite() + .expect("composite expected") + .type_name_or_alias(); + a_name.cmp(&b_name) + }); + + let mut sorted_enums = abi_tokens.enums.clone(); + sorted_enums.sort_by(|a, b| { + let a_name = a + .to_composite() + .expect("composite expected") + .type_name_or_alias(); + let b_name = b + .to_composite() + .expect("composite expected") + .type_name_or_alias(); + a_name.cmp(&b_name) + }); + + for s in &sorted_structs { let s_composite = s.to_composite().expect("composite expected"); tokens.push(CairoStruct::expand_decl(s_composite, derives)); tokens.push(CairoStruct::expand_impl(s_composite)); } - for e in &abi_tokens.enums { + for e in &sorted_enums { let e_composite = e.to_composite().expect("composite expected"); tokens.push(CairoEnum::expand_decl(e_composite, derives)); tokens.push(CairoEnum::expand_impl(e_composite)); @@ -198,6 +224,12 @@ pub fn abi_to_tokenstream( functions.extend(funcs.clone()); } + functions.sort_by(|a, b| { + let a_name = a.to_function().expect("function expected").name.to_string(); + let b_name = b.to_function().expect("function expected").name.to_string(); + a_name.cmp(&b_name) + }); + for f in functions { let f = f.to_function().expect("function expected"); match f.state_mutability {