From 3c5e3bcf306cfa1e15decc3b7a79014f2a0c8558 Mon Sep 17 00:00:00 2001 From: Hubert Bugaj Date: Thu, 15 Jan 2026 19:32:57 +0100 Subject: [PATCH] chore: use derives instead manual impl for trivial derefs --- src/rpc/methods/eth/types.rs | 9 +----- src/shim/address.rs | 34 ++++++++++------------ src/shim/bigint.rs | 27 +++++++---------- src/shim/econ.rs | 30 +++++++++---------- src/shim/randomness.rs | 27 +++++++---------- src/shim/sector.rs | 56 +++++++++++++++--------------------- src/shim/state_tree.rs | 23 +++------------ src/shim/version.rs | 27 ++++++++--------- 8 files changed, 91 insertions(+), 142 deletions(-) diff --git a/src/rpc/methods/eth/types.rs b/src/rpc/methods/eth/types.rs index 8ed2dda171a7..2b59f4634e72 100644 --- a/src/rpc/methods/eth/types.rs +++ b/src/rpc/methods/eth/types.rs @@ -28,6 +28,7 @@ pub const METHOD_GET_STORAGE_AT: u64 = 5; JsonSchema, derive_more::From, derive_more::Into, + derive_more::Deref, GetSize, )] pub struct EthBytes( @@ -59,14 +60,6 @@ impl FromStr for EthBytes { } } -impl Deref for EthBytes { - type Target = Vec; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - #[derive(Debug, Deserialize, Serialize)] pub struct GetBytecodeReturn(pub Option); diff --git a/src/shim/address.rs b/src/shim/address.rs index 92ef42000cdc..6c695097a628 100644 --- a/src/shim/address.rs +++ b/src/shim/address.rs @@ -1,11 +1,7 @@ // Copyright 2019-2026 ChainSafe Systems // SPDX-License-Identifier: Apache-2.0, MIT -use std::{ - fmt::Display, - ops::{Deref, DerefMut}, - str::FromStr, -}; +use std::{fmt::Display, str::FromStr}; use data_encoding::Encoding; use data_encoding_macro::new_encoding; @@ -113,7 +109,20 @@ mod network_guard_impl { /// parse both versions and discard the prefix. See also [`StrictAddress`]. /// /// For more information, see: -#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)] +#[derive( + Copy, + Clone, + Debug, + Hash, + PartialEq, + Eq, + PartialOrd, + Ord, + Serialize, + Deserialize, + derive_more::Deref, + derive_more::DerefMut, +)] #[serde(transparent)] #[cfg_attr(test, derive(derive_quickcheck_arbitrary::Arbitrary))] pub struct Address(Address_latest); @@ -247,19 +256,6 @@ impl Display for Address { } } -impl Deref for Address { - type Target = Address_latest; - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl DerefMut for Address { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } -} - impl GetSize for Address { fn get_heap_size(&self) -> usize { 0 // all variants of the internal payload are stack-allocated diff --git a/src/shim/bigint.rs b/src/shim/bigint.rs index c69ad1932680..4c5faf31fb84 100644 --- a/src/shim/bigint.rs +++ b/src/shim/bigint.rs @@ -1,28 +1,23 @@ // Copyright 2019-2026 ChainSafe Systems // SPDX-License-Identifier: Apache-2.0, MIT -use std::ops::{Deref, DerefMut}; - use super::fvm_shared_latest::bigint::bigint_ser; use serde::{Deserialize, Serialize}; -#[derive(Default, Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] +#[derive( + Default, + Clone, + Debug, + PartialEq, + Eq, + Serialize, + Deserialize, + derive_more::Deref, + derive_more::DerefMut, +)] #[serde(transparent)] pub struct BigInt(#[serde(with = "bigint_ser")] num_bigint::BigInt); -impl Deref for BigInt { - type Target = num_bigint::BigInt; - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl DerefMut for BigInt { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } -} - impl From for BigInt { fn from(other: num_bigint::BigInt) -> Self { BigInt(other) diff --git a/src/shim/econ.rs b/src/shim/econ.rs index f2ff25c64532..6173fabc1ec2 100644 --- a/src/shim/econ.rs +++ b/src/shim/econ.rs @@ -14,7 +14,7 @@ use serde::{Deserialize, Serialize}; use static_assertions::const_assert_eq; use std::{ fmt, - ops::{Add, AddAssign, Deref, DerefMut, Div, Mul, MulAssign, Neg, Rem, Sub, SubAssign}, + ops::{Add, AddAssign, Div, Mul, MulAssign, Neg, Rem, Sub, SubAssign}, sync::LazyLock, }; @@ -25,7 +25,19 @@ const_assert_eq!(TOTAL_FILECOIN_BASE, fvm_shared2::TOTAL_FILECOIN_BASE); pub static TOTAL_FILECOIN: LazyLock = LazyLock::new(|| TokenAmount::from_whole(TOTAL_FILECOIN_BASE)); -#[derive(Clone, PartialEq, Eq, Ord, PartialOrd, Hash, Serialize, Deserialize, Default)] +#[derive( + Clone, + PartialEq, + Eq, + Ord, + PartialOrd, + Hash, + Serialize, + Deserialize, + Default, + derive_more::Deref, + derive_more::DerefMut, +)] #[serde(transparent)] pub struct TokenAmount(TokenAmount_latest); @@ -99,20 +111,6 @@ impl Neg for &TokenAmount { } } -impl Deref for TokenAmount { - type Target = TokenAmount_latest; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl DerefMut for TokenAmount { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } -} - impl std::fmt::Display for TokenAmount { // This trait requires `fmt` with this exact signature. fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { diff --git a/src/shim/randomness.rs b/src/shim/randomness.rs index 30865d5c4189..d5014ec128da 100644 --- a/src/shim/randomness.rs +++ b/src/shim/randomness.rs @@ -1,8 +1,6 @@ // Copyright 2019-2026 ChainSafe Systems // SPDX-License-Identifier: Apache-2.0, MIT -use std::ops::{Deref, DerefMut}; - use super::fvm_shared_latest::randomness::Randomness as Randomness_latest; use fvm_shared2::randomness::Randomness as Randomness_v2; use fvm_shared3::randomness::Randomness as Randomness_v3; @@ -31,7 +29,17 @@ use serde::{Deserialize, Serialize}; /// assert_eq!(fvm3_rand, rand_shim.clone().into()); /// assert_eq!(fvm2_rand, rand_shim.into()); /// ``` -#[derive(PartialEq, Eq, Default, Clone, Debug, Deserialize, Serialize)] +#[derive( + PartialEq, + Eq, + Default, + Clone, + Debug, + Deserialize, + Serialize, + derive_more::Deref, + derive_more::DerefMut, +)] #[serde(transparent)] pub struct Randomness(Randomness_latest); @@ -41,19 +49,6 @@ impl Randomness { } } -impl Deref for Randomness { - type Target = Randomness_latest; - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl DerefMut for Randomness { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } -} - impl From for Randomness { fn from(other: Randomness_v4) -> Self { Randomness(other) diff --git a/src/shim/sector.rs b/src/shim/sector.rs index 2b18276b49b5..1b2ffa770a84 100644 --- a/src/shim/sector.rs +++ b/src/shim/sector.rs @@ -23,7 +23,6 @@ use get_size2::GetSize; use num_derive::FromPrimitive; use serde::{Deserialize, Serialize}; use std::hash::{Hash, Hasher}; -use std::ops::Deref; pub type SectorNumber = fvm_shared4::sector::SectorNumber; @@ -48,7 +47,9 @@ pub type SectorNumber = fvm_shared4::sector::SectorNumber; /// assert_eq!(fvm3_proof, proof_shim.into()); /// assert_eq!(fvm2_proof, proof_shim.into()); /// ``` -#[derive(serde::Serialize, serde::Deserialize, Clone, Copy, Eq, PartialEq, Debug)] +#[derive( + serde::Serialize, serde::Deserialize, Clone, Copy, Eq, PartialEq, Debug, derive_more::Deref, +)] pub struct RegisteredSealProof(RegisteredSealProofV4); impl RegisteredSealProof { @@ -97,13 +98,6 @@ impl RegisteredSealProof { } } -impl Deref for RegisteredSealProof { - type Target = RegisteredSealProofV4; - fn deref(&self) -> &Self::Target { - &self.0 - } -} - impl From for RegisteredSealProof { fn from(value: i64) -> Self { RegisteredSealProof(RegisteredSealProofV4::from(value)) @@ -151,7 +145,15 @@ impl quickcheck::Arbitrary for RegisteredSealProof { /// Represents a shim over `SectorInfo` from `fvm_shared` with convenience /// methods to convert to an older version of the type #[derive( - Eq, PartialEq, Debug, Clone, derive_more::From, derive_more::Into, Serialize, Deserialize, + Eq, + PartialEq, + Debug, + Clone, + derive_more::From, + derive_more::Into, + derive_more::Deref, + Serialize, + Deserialize, )] pub struct SectorInfo(SectorInfoV4); @@ -180,13 +182,6 @@ impl SectorInfo { } } -impl Deref for SectorInfo { - type Target = SectorInfoV4; - fn deref(&self) -> &Self::Target { - &self.0 - } -} - impl From for SectorInfoV2 { fn from(value: SectorInfo) -> SectorInfoV2 { SectorInfoV2 { @@ -226,7 +221,16 @@ impl quickcheck::Arbitrary for ExtendedSectorInfo { } } -#[derive(serde::Serialize, serde::Deserialize, Clone, Debug, Eq, PartialEq, derive_more::Into)] +#[derive( + serde::Serialize, + serde::Deserialize, + Clone, + Debug, + Eq, + PartialEq, + derive_more::Into, + derive_more::Deref, +)] pub struct RegisteredPoStProof(RegisteredPoStProofV4); #[cfg(test)] @@ -236,13 +240,6 @@ impl quickcheck::Arbitrary for RegisteredPoStProof { } } -impl Deref for RegisteredPoStProof { - type Target = RegisteredPoStProofV4; - fn deref(&self) -> &Self::Target { - &self.0 - } -} - impl TryFrom for fil_actors_shared::filecoin_proofs_api::RegisteredPoStProof { type Error = anyhow::Error; @@ -342,6 +339,7 @@ sector_size_conversion!(SectorSizeV2, SectorSizeV3, SectorSizeV4); PartialEq, derive_more::From, derive_more::Into, + derive_more::Deref, Eq, )] #[cfg_attr(test, derive(derive_quickcheck_arbitrary::Arbitrary))] @@ -367,14 +365,6 @@ impl PoStProof { } } -impl Deref for PoStProof { - type Target = PoStProofV4; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - impl From for PoStProof { fn from(value: PoStProofV2) -> PoStProof { PoStProof(PoStProofV4 { diff --git a/src/shim/state_tree.rs b/src/shim/state_tree.rs index ad66b6606611..d336857261b3 100644 --- a/src/shim/state_tree.rs +++ b/src/shim/state_tree.rs @@ -1,9 +1,6 @@ // Copyright 2019-2026 ChainSafe Systems // SPDX-License-Identifier: Apache-2.0, MIT -use std::{ - ops::{Deref, DerefMut}, - sync::Arc, -}; +use std::sync::Arc; use crate::{ networks::{ACTOR_BUNDLES_METADATA, ActorBundleMetadata}, @@ -413,7 +410,9 @@ where /// assert_eq!(fvm3_actor_state, state_shim.clone().into()); /// assert_eq!(fvm2_actor_state, state_shim.into()); /// ``` -#[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] +#[derive( + PartialEq, Eq, Clone, Debug, Serialize, Deserialize, derive_more::Deref, derive_more::DerefMut, +)] #[serde(transparent)] #[cfg_attr(test, derive(derive_quickcheck_arbitrary::Arbitrary))] pub struct ActorState(ActorState_latest); @@ -443,20 +442,6 @@ impl ActorState { } } -impl Deref for ActorState { - type Target = ActorState_latest; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl DerefMut for ActorState { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } -} - impl From<&ActorStateV2> for ActorState { fn from(value: &ActorStateV2) -> Self { Self(ActorState_latest { diff --git a/src/shim/version.rs b/src/shim/version.rs index e9b9797c6bf3..9b6be56b3358 100644 --- a/src/shim/version.rs +++ b/src/shim/version.rs @@ -1,7 +1,6 @@ // Copyright 2019-2026 ChainSafe Systems // SPDX-License-Identifier: Apache-2.0, MIT use std::fmt; -use std::ops::{Deref, DerefMut}; use std::str::FromStr; use crate::lotus_json::lotus_json_with_self; @@ -31,7 +30,18 @@ use serde::{Deserialize, Serialize}; /// assert_eq!(fvm_shared2::version::NetworkVersion::V0, v0.into()); /// ``` #[derive( - Debug, Eq, PartialEq, Clone, Copy, Ord, PartialOrd, Serialize, Deserialize, JsonSchema, + Debug, + Eq, + PartialEq, + Clone, + Copy, + Ord, + PartialOrd, + Serialize, + Deserialize, + JsonSchema, + derive_more::Deref, + derive_more::DerefMut, )] #[repr(transparent)] #[serde(transparent)] @@ -58,19 +68,6 @@ define_network_versions!( 26, 27, 28, ); -impl Deref for NetworkVersion { - type Target = NetworkVersion_latest; - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -impl DerefMut for NetworkVersion { - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.0 - } -} - impl From for NetworkVersion { fn from(value: u32) -> Self { NetworkVersion(NetworkVersion_latest::new(value))