From 109287f4cac8ac39df344b2b10a2c1d2f8c28d2d Mon Sep 17 00:00:00 2001
From: Gavin Wood <gavin@parity.io>
Date: Thu, 31 Aug 2023 07:16:57 +0100
Subject: [PATCH] Put `GetWeight` where it belongs (#1212)

* Put `GetWeight` where it belongs

* add GetWeight to v2

* Re-export unchanged trait

---------

Co-authored-by: Just van Stam <just.van.stam@gmail.com>
Co-authored-by: Keith Yeung <kungfukeith11@gmail.com>
---
 polkadot/xcm/src/lib.rs                | 5 -----
 polkadot/xcm/src/v2/mod.rs             | 4 ++--
 polkadot/xcm/src/v2/traits.rs          | 5 +++++
 polkadot/xcm/src/v3/mod.rs             | 5 +++--
 polkadot/xcm/xcm-builder/src/weight.rs | 5 ++---
 5 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/polkadot/xcm/src/lib.rs b/polkadot/xcm/src/lib.rs
index a012c5f53fb..52f32f7310b 100644
--- a/polkadot/xcm/src/lib.rs
+++ b/polkadot/xcm/src/lib.rs
@@ -447,11 +447,6 @@ pub mod opaque {
 	pub type VersionedXcm = super::VersionedXcm<()>;
 }
 
-// A simple trait to get the weight of some object.
-pub trait GetWeight<W> {
-	fn weight(&self) -> latest::Weight;
-}
-
 #[test]
 fn conversion_works() {
 	use latest::prelude::*;
diff --git a/polkadot/xcm/src/v2/mod.rs b/polkadot/xcm/src/v2/mod.rs
index 8a67b771c9e..a81468cd481 100644
--- a/polkadot/xcm/src/v2/mod.rs
+++ b/polkadot/xcm/src/v2/mod.rs
@@ -55,7 +55,7 @@ use super::{
 		NetworkId as NewNetworkId, Response as NewResponse, WeightLimit as NewWeightLimit,
 		Xcm as NewXcm,
 	},
-	DoubleEncoded, GetWeight,
+	DoubleEncoded,
 };
 use alloc::{vec, vec::Vec};
 use bounded_collections::{ConstU32, WeakBoundedVec};
@@ -77,7 +77,7 @@ pub use multiasset::{
 pub use multilocation::{
 	Ancestor, AncestorThen, InteriorMultiLocation, Junctions, MultiLocation, Parent, ParentThen,
 };
-pub use traits::{Error, ExecuteXcm, Outcome, Result, SendError, SendResult, SendXcm};
+pub use traits::{Error, ExecuteXcm, GetWeight, Outcome, Result, SendError, SendResult, SendXcm};
 
 /// Basically just the XCM (more general) version of `ParachainDispatchOrigin`.
 #[derive(Copy, Clone, Eq, PartialEq, Encode, Decode, Debug, TypeInfo)]
diff --git a/polkadot/xcm/src/v2/traits.rs b/polkadot/xcm/src/v2/traits.rs
index ae03cf5547b..80603b4100d 100644
--- a/polkadot/xcm/src/v2/traits.rs
+++ b/polkadot/xcm/src/v2/traits.rs
@@ -23,6 +23,11 @@ use scale_info::TypeInfo;
 
 use super::*;
 
+// A simple trait to get the weight of some object.
+pub trait GetWeight<W> {
+	fn weight(&self) -> sp_weights::Weight;
+}
+
 #[derive(Copy, Clone, Encode, Decode, Eq, PartialEq, Debug, TypeInfo)]
 pub enum Error {
 	// Errors that happen due to instructions being executed. These alone are defined in the
diff --git a/polkadot/xcm/src/v3/mod.rs b/polkadot/xcm/src/v3/mod.rs
index ef3306d276f..78ea7a58aba 100644
--- a/polkadot/xcm/src/v3/mod.rs
+++ b/polkadot/xcm/src/v3/mod.rs
@@ -20,7 +20,7 @@ use super::v2::{
 	Instruction as OldInstruction, Response as OldResponse, WeightLimit as OldWeightLimit,
 	Xcm as OldXcm,
 };
-use crate::{DoubleEncoded, GetWeight};
+use crate::DoubleEncoded;
 use alloc::{vec, vec::Vec};
 use bounded_collections::{parameter_types, BoundedVec, ConstU32};
 use core::{
@@ -54,7 +54,7 @@ pub use traits::{
 	SendResult, SendXcm, Weight, XcmHash,
 };
 // These parts of XCM v2 are unchanged in XCM v3, and are re-imported here.
-pub use super::v2::OriginKind;
+pub use super::v2::{GetWeight, OriginKind};
 
 /// This module's XCM version.
 pub const VERSION: super::Version = 3;
@@ -186,6 +186,7 @@ pub mod prelude {
 			AssetInstance::{self, *},
 			BodyId, BodyPart, Error as XcmError, ExecuteXcm,
 			Fungibility::{self, *},
+			GetWeight,
 			Instruction::*,
 			InteriorMultiLocation,
 			Junction::{self, *},
diff --git a/polkadot/xcm/xcm-builder/src/weight.rs b/polkadot/xcm/xcm-builder/src/weight.rs
index f1c14a4c651..c16c52939a3 100644
--- a/polkadot/xcm/xcm-builder/src/weight.rs
+++ b/polkadot/xcm/xcm-builder/src/weight.rs
@@ -73,7 +73,7 @@ where
 	W: XcmWeightInfo<C>,
 	C: Decode + GetDispatchInfo,
 	M: Get<u32>,
-	Instruction<C>: xcm::GetWeight<W>,
+	Instruction<C>: xcm::latest::GetWeight<W>,
 {
 	fn weight(message: &mut Xcm<C>) -> Result<Weight, ()> {
 		log::trace!(target: "xcm::weight", "WeightInfoBounds message: {:?}", message);
@@ -90,7 +90,7 @@ where
 	W: XcmWeightInfo<C>,
 	C: Decode + GetDispatchInfo,
 	M: Get<u32>,
-	Instruction<C>: xcm::GetWeight<W>,
+	Instruction<C>: xcm::latest::GetWeight<W>,
 {
 	fn weight_with_limit(message: &Xcm<C>, instrs_limit: &mut u32) -> Result<Weight, ()> {
 		let mut r: Weight = Weight::zero();
@@ -104,7 +104,6 @@ where
 		instruction: &Instruction<C>,
 		instrs_limit: &mut u32,
 	) -> Result<Weight, ()> {
-		use xcm::GetWeight;
 		let instr_weight = match instruction {
 			Transact { require_weight_at_most, .. } => *require_weight_at_most,
 			SetErrorHandler(xcm) | SetAppendix(xcm) => Self::weight_with_limit(xcm, instrs_limit)?,
-- 
GitLab