difftreelog
misk: Add more checks for enum
in: master
8 files changed
crates/evm-coder/procedural/src/abi_derive.rsdiffbeforeafterboth--- a/crates/evm-coder/procedural/src/abi_derive.rs
+++ b/crates/evm-coder/procedural/src/abi_derive.rs
@@ -58,9 +58,26 @@
})
}
syn::Data::Enum(de) => {
- let _ = check_repr_u8(name, &ast.attrs)?;
+ check_repr_u8(name, &ast.attrs)?;
- // dbg!(de);
+ dbg!(&de);
+ for f in de.variants.iter().filter_map(|v| {
+ if !v.fields.is_empty() {
+ Some(Err(syn::Error::new(
+ v.ident.span(),
+ "Enumeration parameters should not have fields",
+ )))
+ } else if v.discriminant.is_some() {
+ Some(Err(syn::Error::new(
+ v.ident.span(),
+ "Enumeration options should not have an explicit specified value",
+ )))
+ } else {
+ None
+ }
+ }) {
+ f?;
+ }
Ok(quote!())
}
syn::Data::Union(_) => Err(syn::Error::new(name.span(), "Unions not supported")),
crates/evm-coder/tests/abi_derive_generation.rsdiffbeforeafterboth--- a/crates/evm-coder/tests/abi_derive_generation.rs
+++ b/crates/evm-coder/tests/abi_derive_generation.rs
@@ -5,7 +5,7 @@
#[test]
fn empty_struct() {
let t = trybuild::TestCases::new();
- t.compile_fail("tests/build_failed/abi_derive_generation.rs");
+ t.compile_fail("tests/build_failed/abi_derive_struct_generation.rs");
}
#[derive(AbiCoder, PartialEq, Debug)]
@@ -744,9 +744,15 @@
enum Color {
Red,
Green,
- Blue = 255,
+ Blue,
}
#[test]
fn empty() {}
+
+ #[test]
+ fn bad_enums() {
+ let t = trybuild::TestCases::new();
+ t.compile_fail("tests/build_failed/abi_derive_enum_generation.rs");
+ }
}
crates/evm-coder/tests/build_failed/abi_derive_enum_generation.rsdiffbeforeafterbothno changes
crates/evm-coder/tests/build_failed/abi_derive_enum_generation.stderrdiffbeforeafterboth--- /dev/null
+++ b/crates/evm-coder/tests/build_failed/abi_derive_enum_generation.stderr
@@ -0,0 +1,23 @@
+error: Enum is not "repr(u8)"
+ --> tests/build_failed/abi_derive_enum_generation.rs:4:6
+ |
+4 | enum NonRepr {
+ | ^^^^^^^
+
+error: Enum is not "repr(u8)"
+ --> tests/build_failed/abi_derive_enum_generation.rs:12:6
+ |
+12 | enum NonReprU8 {
+ | ^^^^^^^^^
+
+error: Enumeration parameters should not have fields
+ --> tests/build_failed/abi_derive_enum_generation.rs:21:2
+ |
+21 | A(u128),
+ | ^
+
+error: Enumeration options should not have an explicit specified value
+ --> tests/build_failed/abi_derive_enum_generation.rs:29:2
+ |
+29 | A = 128,
+ | ^
crates/evm-coder/tests/build_failed/abi_derive_generation.rsdiffbeforeafterboth--- a/crates/evm-coder/tests/build_failed/abi_derive_generation.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-use evm_coder_procedural::AbiCoder;
-
-#[derive(AbiCoder, PartialEq, Debug)]
-struct EmptyStruct {}
-
-#[derive(AbiCoder, PartialEq, Debug)]
-struct EmptyTupleStruct();
-
-fn main() {
- assert!(false);
-}
crates/evm-coder/tests/build_failed/abi_derive_generation.stderrdiffbeforeafterboth--- a/crates/evm-coder/tests/build_failed/abi_derive_generation.stderr
+++ /dev/null
@@ -1,11 +0,0 @@
-error: Empty structs not supported
- --> tests/build_failed/abi_derive_generation.rs:4:8
- |
-4 | struct EmptyStruct {}
- | ^^^^^^^^^^^
-
-error: Empty structs not supported
- --> tests/build_failed/abi_derive_generation.rs:7:8
- |
-7 | struct EmptyTupleStruct();
- | ^^^^^^^^^^^^^^^^
crates/evm-coder/tests/build_failed/abi_derive_struct_generation.rsdiffbeforeafterboth--- /dev/null
+++ b/crates/evm-coder/tests/build_failed/abi_derive_struct_generation.rs
@@ -0,0 +1,11 @@
+use evm_coder_procedural::AbiCoder;
+
+#[derive(AbiCoder, PartialEq, Debug)]
+struct EmptyStruct {}
+
+#[derive(AbiCoder, PartialEq, Debug)]
+struct EmptyTupleStruct();
+
+fn main() {
+ assert!(false);
+}
crates/evm-coder/tests/build_failed/abi_derive_struct_generation.stderrdiffbeforeafterboth--- /dev/null
+++ b/crates/evm-coder/tests/build_failed/abi_derive_struct_generation.stderr
@@ -0,0 +1,11 @@
+error: Empty structs not supported
+ --> tests/build_failed/abi_derive_struct_generation.rs:4:8
+ |
+4 | struct EmptyStruct {}
+ | ^^^^^^^^^^^
+
+error: Empty structs not supported
+ --> tests/build_failed/abi_derive_struct_generation.rs:7:8
+ |
+7 | struct EmptyTupleStruct();
+ | ^^^^^^^^^^^^^^^^