difftreelog
refactor decouple make_signature from constant itself
in: master
9 files changed
crates/evm-coder/procedural/src/solidity_interface.rsdiffbeforeafterboth--- a/crates/evm-coder/procedural/src/solidity_interface.rs
+++ b/crates/evm-coder/procedural/src/solidity_interface.rs
@@ -721,7 +721,7 @@
for arg in self.args.iter().filter(|a| !a.is_special()) {
has_params = true;
let ty = &arg.ty;
- args.extend(quote! {nameof(#ty)});
+ args.extend(quote! {nameof(<#ty>::SIGNATURE)});
args.extend(quote! {fixed(",")})
}
crates/evm-coder/src/abi.rsdiffbeforeafterboth--- a/crates/evm-coder/src/abi.rs
+++ b/crates/evm-coder/src/abi.rs
@@ -428,7 +428,7 @@
}
impl<R: Signature> Signature for Vec<R> {
- const SIGNATURE: SignatureUnit = make_signature!(new nameof(R) fixed("[]"));
+ const SIGNATURE: SignatureUnit = make_signature!(new nameof(R::SIGNATURE) fixed("[]"));
}
impl sealed::CanBePlacedInVec for EthCrossAccount {}
@@ -524,7 +524,7 @@
{
const SIGNATURE: SignatureUnit = make_signature!(
new fixed("(")
- $(nameof($ident) fixed(","))+
+ $(nameof(<$ident>::SIGNATURE) fixed(","))+
shift_left(1)
fixed(")")
);
crates/evm-coder/src/custom_signature.rsdiffbeforeafterboth9//! #### Example9//! #### Example10//! ```10//! ```11//! use std::str::from_utf8;11//! use std::str::from_utf8;12//! use evm_coder::make_signature;13//! use evm_coder::custom_signature::{12//! use evm_coder::{custom_signature::SignatureUnit, make_signature};14//! SignatureUnit,15//! SIGNATURE_SIZE_LIMIT16//! };17//!13//!18//! // Create trait for our signature14//! // Create trait for our signature19//! trait SoliditySignature {15//! trait SoliditySignature {20//! const SIGNATURE: SignatureUnit;16//! const SIGNATURE: SignatureUnit;21//!17//!22//! fn name() -> &'static str {18//! fn name() -> &'static str {23//! from_utf8(&Self::SIGNATURE.data[..Self::SIGNATURE.len]).expect("bad utf-8")19//! from_utf8(&Self::SIGNATURE.data[..Self::SIGNATURE.len]).expect("bad utf-8")24//! }20//! }25//! }21//! }26//!22//!27//! // Make signatures for some types23//! // Make signatures for some types28//! impl SoliditySignature for u8 {24//! impl SoliditySignature for u8 {29//! make_signature!(new fixed("uint8"));25//! const SIGNATURE: SignatureUnit = make_signature!(new fixed("uint8"));30//! }26//! }31//! impl SoliditySignature for u32 {27//! impl SoliditySignature for u32 {32//! make_signature!(new fixed("uint32"));28//! const SIGNATURE: SignatureUnit = make_signature!(new fixed("uint32"));33//! }29//! }34//! impl<T: SoliditySignature> SoliditySignature for Vec<T> {30//! impl<T: SoliditySignature> SoliditySignature for Vec<T> {35//! make_signature!(new nameof(T) fixed("[]"));31//! const SIGNATURE: SignatureUnit = make_signature!(new nameof(T::SIGNATURE) fixed("[]"));36//! }32//! }37//! impl<A: SoliditySignature, B: SoliditySignature> SoliditySignature for (A, B) {33//! impl<A: SoliditySignature, B: SoliditySignature> SoliditySignature for (A, B) {38//! make_signature!(new fixed("(") nameof(A) fixed(",") nameof(B) fixed(")"));34//! const SIGNATURE: SignatureUnit = make_signature!(new fixed("(") nameof(A::SIGNATURE) fixed(",") nameof(B::SIGNATURE) fixed(")"));39//! }35//! }40//! impl<A: SoliditySignature> SoliditySignature for (A,) {36//! impl<A: SoliditySignature> SoliditySignature for (A,) {41//! make_signature!(new fixed("(") nameof(A) fixed(",") shift_left(1) fixed(")"));37//! const SIGNATURE: SignatureUnit = make_signature!(new fixed("(") nameof(A::SIGNATURE) fixed(",") shift_left(1) fixed(")"));42//! }38//! }43//!39//!44//! assert_eq!(u8::name(), "uint8");40//! assert_eq!(u8::name(), "uint8");45//! assert_eq!(<Vec<u8>>::name(), "uint8[]");41//! assert_eq!(<Vec<u8>>::name(), "uint8[]");52//! #### Example48//! #### Example53//! ```49//! ```54//! use core::str::from_utf8;50//! use core::str::from_utf8;55//! use evm_coder::{51//! use evm_coder::{custom_signature::SignatureUnit, make_signature};56//! make_signature,57//! custom_signature::{58//! SIGNATURE_SIZE_LIMIT, SignatureUnit, SignaturePreferences, FunctionSignature,59//! },60//! };61//! // Trait for our signature52//! // Trait for our signature62//! trait SoliditySignature {53//! trait SoliditySignature {63//! const SIGNATURE: SignatureUnit;54//! const SIGNATURE: SignatureUnit;64//!55//!65//! fn name() -> &'static str {56//! fn name() -> &'static str {66//! from_utf8(&Self::SIGNATURE.data[..Self::SIGNATURE.len]).expect("bad utf-8")57//! from_utf8(&Self::SIGNATURE.data[..Self::SIGNATURE.len]).expect("bad utf-8")67//! }58//! }68//! }59//! }69//!60//!70//! // Make signatures for some types61//! // Make signatures for some types71//! impl SoliditySignature for u8 {62//! impl SoliditySignature for u8 {72//! make_signature!(new fixed("uint8"));63//! const SIGNATURE: SignatureUnit = make_signature!(new fixed("uint8"));73//! }64//! }74//! impl<T: SoliditySignature> SoliditySignature for Vec<T> {65//! impl<T: SoliditySignature> SoliditySignature for Vec<T> {75//! make_signature!(new nameof(T) fixed("[]"));66//! const SIGNATURE: SignatureUnit = make_signature!(new nameof(T::SIGNATURE) fixed("[]"));76//! }67//! }77//! ```68//! ```786979/// The maximum length of the signature.70/// The maximum length of the signature.134 (@size; fixed($expr:expr) $($tt:tt)*) => {125 (@size; fixed($expr:expr) $($tt:tt)*) => {135 $expr.len() + $crate::make_signature!(@size; $($tt)*)126 $expr.len() + $crate::make_signature!(@size; $($tt)*)136 };127 };137 (@size; nameof($expr:ty) $($tt:tt)*) => {128 (@size; nameof($expr:expr) $($tt:tt)*) => {138 <$expr>::SIGNATURE.len + $crate::make_signature!(@size; $($tt)*)129 $expr.len + $crate::make_signature!(@size; $($tt)*)139 };130 };131 (@size; numof($expr:expr) $($tt:tt)*) => {132 {133 let mut out = 0;134 let mut v = $expr;135 if v == 0 {136 out = 1;137 } else {138 while v > 0 {139 out += 1;140 v /= 10;141 }142 }143 out144 } + $crate::make_signature!(@size; $($tt)*)145 };140 (@size; shift_left($expr:expr) $($tt:tt)*) => {146 (@size; shift_left($expr:expr) $($tt:tt)*) => {141 $crate::make_signature!(@size; $($tt)*) - $expr147 $crate::make_signature!(@size; $($tt)*) - $expr142 };148 };150 }156 }151 $crate::make_signature!(@data($dst, $dst_offset); $($tt)*)157 $crate::make_signature!(@data($dst, $dst_offset); $($tt)*)152 };158 };153 (@data($dst:ident, $dst_offset:ident); nameof($expr:ty) $($tt:tt)*) => {159 (@data($dst:ident, $dst_offset:ident); nameof($expr:expr) $($tt:tt)*) => {154 {160 {155 $crate::make_signature!(@copy(&<$expr>::SIGNATURE.data, $dst, <$expr>::SIGNATURE.len, $dst_offset));161 $crate::make_signature!(@copy(&$expr.data, $dst, $expr.len, $dst_offset));156 }162 }157 $crate::make_signature!(@data($dst, $dst_offset); $($tt)*)163 $crate::make_signature!(@data($dst, $dst_offset); $($tt)*)158 };164 };165 (@data($dst:ident, $dst_offset:ident); numof($expr:expr) $($tt:tt)*) => {166 {167 let mut v = $expr;168 let mut need_to_swap = 0;169 if v == 0 {170 $dst[$dst_offset] = b'0';171 $dst_offset += 1;172 } else {173 while v > 0 {174 let n = (v % 10) as u8;175 $dst[$dst_offset] = b'0' + n;176 v /= 10;177 need_to_swap += 1;178 $dst_offset += 1;179 }180 }181 let mut i = 0;182 #[allow(clippy::manual_swap)]183 while i < need_to_swap / 2 {184 let a = $dst_offset - i - 1;185 let b = $dst_offset - need_to_swap + i;186 let v = $dst[a];187 $dst[a] = $dst[b];188 $dst[b] = v;189 i += 1;190 }191 }192 $crate::make_signature!(@data($dst, $dst_offset); $($tt)*)193 };159 (@data($dst:ident, $dst_offset:ident); shift_left($expr:expr) $($tt:tt)*) => {194 (@data($dst:ident, $dst_offset:ident); shift_left($expr:expr) $($tt:tt)*) => {160 $dst_offset -= $expr;195 $dst_offset -= $expr;161 $crate::make_signature!(@data($dst, $dst_offset); $($tt)*)196 $crate::make_signature!(@data($dst, $dst_offset); $($tt)*)181 use super::{SIGNATURE_SIZE_LIMIT, SignatureUnit};216 use super::{SIGNATURE_SIZE_LIMIT, SignatureUnit};182217183 trait Name {218 trait Name {184 const SIGNATURE: SignatureUnit;219 const NAME: SignatureUnit;185220186 fn name() -> &'static str {221 fn name() -> &'static str {187 from_utf8(&Self::SIGNATURE.data[..Self::SIGNATURE.len]).expect("bad utf-8")222 from_utf8(&Self::NAME.data[..Self::NAME.len]).expect("bad utf-8")188 }223 }189 }224 }190225191 impl Name for u8 {226 impl Name for u8 {192 const SIGNATURE: SignatureUnit = make_signature!(new fixed("uint8"));227 const NAME: SignatureUnit = make_signature!(new fixed("uint8"));193 }228 }194 impl Name for u32 {229 impl Name for u32 {195 const SIGNATURE: SignatureUnit = make_signature!(new fixed("uint32"));230 const NAME: SignatureUnit = make_signature!(new fixed("uint32"));196 }231 }197 impl<T: Name> Name for Vec<T> {232 impl<T: Name> Name for Vec<T> {198 const SIGNATURE: SignatureUnit = make_signature!(new nameof(T) fixed("[]"));233 const NAME: SignatureUnit = make_signature!(new nameof(T::NAME) fixed("[]"));199 }234 }200 impl<A: Name, B: Name> Name for (A, B) {235 impl<A: Name, B: Name> Name for (A, B) {201 const SIGNATURE: SignatureUnit =236 const NAME: SignatureUnit =202 make_signature!(new fixed("(") nameof(A) fixed(",") nameof(B) fixed(")"));237 make_signature!(new fixed("(") nameof(A::NAME) fixed(",") nameof(B::NAME) fixed(")"));203 }238 }204 impl<A: Name> Name for (A,) {239 impl<A: Name> Name for (A,) {205 const SIGNATURE: SignatureUnit =240 const NAME: SignatureUnit =206 make_signature!(new fixed("(") nameof(A) fixed(",") shift_left(1) fixed(")"));241 make_signature!(new fixed("(") nameof(A::NAME) fixed(",") shift_left(1) fixed(")"));207 }242 }243 impl<A: Name, const SIZE: usize> Name for [A; SIZE] {244 const NAME: SignatureUnit =245 make_signature!(new nameof(A::NAME) fixed("[") numof(SIZE) fixed("]"));246 }208247209 struct MaxSize();248 struct MaxSize();210 impl Name for MaxSize {249 impl Name for MaxSize {211 const SIGNATURE: SignatureUnit = SignatureUnit {250 const NAME: SignatureUnit = SignatureUnit {212 data: [b'!'; SIGNATURE_SIZE_LIMIT],251 data: [b'!'; SIGNATURE_SIZE_LIMIT],213 len: SIGNATURE_SIZE_LIMIT,252 len: SIGNATURE_SIZE_LIMIT,214 };253 };272 assert_eq!(<(u32,)>::name(), "(uint32)");311 assert_eq!(<(u32,)>::name(), "(uint32)");273 }312 }313314 #[test]315 fn num() {316 assert_eq!(<[u8; 0]>::name(), "uint8[0]");317 assert_eq!(<[u8; 1234]>::name(), "uint8[1234]");318 assert_eq!(<[u8; 12345]>::name(), "uint8[12345]");319 }274320275 #[test]321 #[test]276 fn over_max_size() {322 fn over_max_size() {crates/evm-coder/tests/build_failed/custom_signature_over_max_size.rsdiffbeforeafterboth--- a/crates/evm-coder/tests/build_failed/custom_signature_over_max_size.rs
+++ b/crates/evm-coder/tests/build_failed/custom_signature_over_max_size.rs
@@ -15,7 +15,8 @@
}
impl<T: Name> Name for Vec<T> {
- evm_coder::make_signature!(new nameof(T) fixed("[]"));
+ const SIGNATURE: SignatureUnit =
+ evm_coder::make_signature!(new nameof(T::SIGNATURE) fixed("[]"));
}
struct MaxSize();
crates/evm-coder/tests/build_failed/custom_signature_over_max_size.stderrdiffbeforeafterboth--- a/crates/evm-coder/tests/build_failed/custom_signature_over_max_size.stderr
+++ b/crates/evm-coder/tests/build_failed/custom_signature_over_max_size.stderr
@@ -1,18 +1,28 @@
+warning: unused import: `make_signature`
+ --> tests/build_failed/custom_signature_over_max_size.rs:5:2
+ |
+5 | make_signature,
+ | ^^^^^^^^^^^^^^
+ |
+ = note: `#[warn(unused_imports)]` on by default
+
error: any use of this value will cause an error
- --> tests/build_failed/custom_signature_over_max_size.rs:18:2
+ --> tests/build_failed/custom_signature_over_max_size.rs:19:3
|
-18 | evm_coder::make_signature!(new nameof(T) fixed("[]"));
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ index out of bounds: the length is 256 but the index is 256
+18 | const SIGNATURE: SignatureUnit =
+ | ------------------------------
+19 | evm_coder::make_signature!(new nameof(T::SIGNATURE) fixed("[]"));
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ index out of bounds: the length is 256 but the index is 256
|
= note: `#[deny(const_err)]` on by default
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #71800 <https://github.com/rust-lang/rust/issues/71800>
- = note: this error originates in the macro `make_signature` which comes from the expansion of the macro `evm_coder::make_signature` (in Nightly builds, run with -Z macro-backtrace for more info)
+ = note: this error originates in the macro `$crate::make_signature` which comes from the expansion of the macro `evm_coder::make_signature` (in Nightly builds, run with -Z macro-backtrace for more info)
error: any use of this value will cause an error
- --> tests/build_failed/custom_signature_over_max_size.rs:29:29
+ --> tests/build_failed/custom_signature_over_max_size.rs:30:29
|
-29 | const NAME: SignatureUnit = <Vec<MaxSize>>::SIGNATURE;
+30 | const NAME: SignatureUnit = <Vec<MaxSize>>::SIGNATURE;
| ------------------------- ^^^^^^^^^^^^^^^^^^^^^^^^^ referenced constant has errors
|
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
crates/evm-coder/tests/conditional_is.rsdiffbeforeafterboth--- a/crates/evm-coder/tests/conditional_is.rs
+++ b/crates/evm-coder/tests/conditional_is.rs
@@ -1,11 +1,4 @@
use evm_coder::{types::*, solidity_interface, execution::Result};
-use evm_coder::{
- make_signature,
- custom_signature::{
- SIGNATURE_SIZE_LIMIT, SignatureUnit, SignaturePreferences, FunctionSignature,
- },
- types::Signature,
-};
pub struct Contract(bool);
crates/evm-coder/tests/generics.rsdiffbeforeafterboth--- a/crates/evm-coder/tests/generics.rs
+++ b/crates/evm-coder/tests/generics.rs
@@ -16,12 +16,6 @@
use std::marker::PhantomData;
use evm_coder::{execution::Result, generate_stubgen, solidity_interface, types::*};
-use evm_coder::{
- make_signature,
- custom_signature::{
- SIGNATURE_SIZE_LIMIT, SignatureUnit, SignaturePreferences, FunctionSignature,
- },
-};
pub struct Generic<T>(PhantomData<T>);
crates/evm-coder/tests/random.rsdiffbeforeafterboth--- a/crates/evm-coder/tests/random.rs
+++ b/crates/evm-coder/tests/random.rs
@@ -17,13 +17,7 @@
#![allow(dead_code)] // This test only checks that macros is not panicking
use evm_coder::{ToLog, execution::Result, solidity_interface, types::*, solidity, weight};
-use evm_coder::{
- make_signature,
- custom_signature::{
- SIGNATURE_SIZE_LIMIT, SignatureUnit, SignaturePreferences, FunctionSignature,
- },
- types::Signature,
-};
+use evm_coder::{types::Signature};
pub struct Impls;
crates/evm-coder/tests/solidity_generation.rsdiffbeforeafterboth--- a/crates/evm-coder/tests/solidity_generation.rs
+++ b/crates/evm-coder/tests/solidity_generation.rs
@@ -15,13 +15,7 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
use evm_coder::{execution::Result, generate_stubgen, solidity_interface, types::*};
-use evm_coder::{
- make_signature,
- custom_signature::{
- SIGNATURE_SIZE_LIMIT, SignatureUnit, SignaturePreferences, FunctionSignature,
- },
- types::Signature,
-};
+use evm_coder::{types::Signature};
pub struct ERC20;