diff --git a/Cargo.lock b/Cargo.lock index c2551981f88..e61ec8e091d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3175,6 +3175,7 @@ dependencies = [ "num-rational", "serde", "serde_json", + "serde_repr", "sha2 0.10.2", "strum", ] @@ -4950,6 +4951,17 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_repr" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" diff --git a/core/primitives-core/Cargo.toml b/core/primitives-core/Cargo.toml index 8f06fbb6d62..c1d7620fc4f 100644 --- a/core/primitives-core/Cargo.toml +++ b/core/primitives-core/Cargo.toml @@ -19,6 +19,7 @@ bs58 = "0.4" derive_more = "0.99.3" num-rational = { version = "0.3.1", features = ["serde"]} serde = { version = "1", features = ["derive"] } +serde_repr = { version = "0.1.8" } strum = { version = "0.24", features = ["derive"] } sha2 = "0.10" deepsize = { version = "0.2.0", optional = true } diff --git a/core/primitives-core/src/config.rs b/core/primitives-core/src/config.rs index 0ba8eb159e0..e26e4150e19 100644 --- a/core/primitives-core/src/config.rs +++ b/core/primitives-core/src/config.rs @@ -109,7 +109,17 @@ fn wasmer2_stack_limit_default() -> i32 { /// `0` or `1`. We could have used a `bool` instead, but there's a chance that /// our current impl isn't perfect either and would need further tweaks in the /// future. -#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] +#[derive( + Debug, + Clone, + Copy, + Hash, + PartialEq, + Eq, + serde_repr::Serialize_repr, + serde_repr::Deserialize_repr, +)] +#[repr(u8)] pub enum StackLimiterVersion { /// Old, buggy version, don't use it unless specifically to support old protocol version. V0, @@ -121,44 +131,19 @@ impl StackLimiterVersion { fn v0() -> StackLimiterVersion { StackLimiterVersion::V0 } - fn repr(self) -> u32 { - match self { - StackLimiterVersion::V0 => 0, - StackLimiterVersion::V1 => 1, - } - } - fn from_repr(repr: u32) -> Option { - let res = match repr { - 0 => StackLimiterVersion::V0, - 1 => StackLimiterVersion::V1, - _ => return None, - }; - Some(res) - } -} - -impl Serialize for StackLimiterVersion { - fn serialize(&self, serializer: S) -> Result - where - S: serde::Serializer, - { - self.repr().serialize(serializer) - } -} - -impl<'de> Deserialize<'de> for StackLimiterVersion { - fn deserialize(deserializer: D) -> Result - where - D: serde::Deserializer<'de>, - { - u32::deserialize(deserializer).and_then(|repr| { - StackLimiterVersion::from_repr(repr) - .ok_or_else(|| serde::de::Error::custom("invalid stack_limiter_version")) - }) - } } -#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] +#[derive( + Debug, + Clone, + Copy, + Hash, + PartialEq, + Eq, + serde_repr::Serialize_repr, + serde_repr::Deserialize_repr, +)] +#[repr(u8)] pub enum AccountIdValidityRulesVersion { /// Skip account ID validation according to legacy rules. V0, @@ -170,41 +155,6 @@ impl AccountIdValidityRulesVersion { fn v0() -> AccountIdValidityRulesVersion { AccountIdValidityRulesVersion::V0 } - fn repr(self) -> u32 { - match self { - AccountIdValidityRulesVersion::V0 => 0, - AccountIdValidityRulesVersion::V1 => 1, - } - } - fn from_repr(repr: u32) -> Option { - let res = match repr { - 0 => AccountIdValidityRulesVersion::V0, - 1 => AccountIdValidityRulesVersion::V1, - _ => return None, - }; - Some(res) - } -} - -impl Serialize for AccountIdValidityRulesVersion { - fn serialize(&self, serializer: S) -> Result - where - S: serde::Serializer, - { - self.repr().serialize(serializer) - } -} - -impl<'de> Deserialize<'de> for AccountIdValidityRulesVersion { - fn deserialize(deserializer: D) -> Result - where - D: serde::Deserializer<'de>, - { - u32::deserialize(deserializer).and_then(|repr| { - AccountIdValidityRulesVersion::from_repr(repr) - .ok_or_else(|| serde::de::Error::custom("invalid account_id_validity_rules")) - }) - } } impl VMConfig {