mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-31 02:51:01 +00:00
Remove xcm::v3 from assets-common nits (#4037)
This PR mainly removes `xcm::v3` stuff from `assets-common` to make it
more generic and facilitate the transition to newer XCM versions. Some
of the implementations here used hard-coded `xcm::v3::Location`, but now
it's up to the runtime to configure according to its needs.
Additional/consequent changes:
- `penpal` runtime uses now `xcm::latest::Location` for `pallet_assets`
as `AssetId`, because we don't care about migrations here
- it pretty much simplify xcm-emulator integration tests, where we don't
need now a lots of boilerplate conversions:
```
v3::Location::try_from(...).expect("conversion works")`
```
- xcm-emulator tests
- split macro `impl_assets_helpers_for_parachain` to the
`impl_assets_helpers_for_parachain` and
`impl_foreign_assets_helpers_for_parachain` (avoids using hard-coded
`xcm::v3::Location`)
This commit is contained in:
@@ -107,17 +107,6 @@ impl<
|
||||
#[deprecated = "Use `ConvertedConcreteId` instead"]
|
||||
pub type ConvertedConcreteAssetId<A, B, C, O> = ConvertedConcreteId<A, B, C, O>;
|
||||
|
||||
pub struct V4V3LocationConverter;
|
||||
impl MaybeEquivalence<xcm::v4::Location, xcm::v3::Location> for V4V3LocationConverter {
|
||||
fn convert(old: &xcm::v4::Location) -> Option<xcm::v3::Location> {
|
||||
(*old).clone().try_into().ok()
|
||||
}
|
||||
|
||||
fn convert_back(new: &xcm::v3::Location) -> Option<xcm::v4::Location> {
|
||||
(*new).try_into().ok()
|
||||
}
|
||||
}
|
||||
|
||||
pub struct MatchedConvertedConcreteId<AssetId, Balance, MatchAssetId, ConvertAssetId, ConvertOther>(
|
||||
PhantomData<(AssetId, Balance, MatchAssetId, ConvertAssetId, ConvertOther)>,
|
||||
);
|
||||
|
||||
@@ -30,7 +30,7 @@ mod asset_conversion;
|
||||
#[allow(deprecated)]
|
||||
pub use asset_conversion::ConvertedConcreteAssetId;
|
||||
pub use asset_conversion::{
|
||||
AsPrefixedGeneralIndex, ConvertedConcreteId, MatchedConvertedConcreteId, V4V3LocationConverter,
|
||||
AsPrefixedGeneralIndex, ConvertedConcreteId, MatchedConvertedConcreteId,
|
||||
};
|
||||
|
||||
mod barriers;
|
||||
@@ -81,7 +81,9 @@ pub use location_conversion::{
|
||||
};
|
||||
|
||||
mod matches_location;
|
||||
pub use matches_location::{StartsWith, StartsWithExplicitGlobalConsensus};
|
||||
pub use matches_location::{
|
||||
StartsWith, StartsWithExplicitGlobalConsensus, WithLatestLocationConverter,
|
||||
};
|
||||
|
||||
mod matches_token;
|
||||
pub use matches_token::IsConcrete;
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
//! `InteriorLocation` types.
|
||||
|
||||
use frame_support::traits::{Contains, Get};
|
||||
use sp_runtime::traits::MaybeEquivalence;
|
||||
use sp_std::marker::PhantomData;
|
||||
use xcm::latest::{InteriorLocation, Location, NetworkId};
|
||||
|
||||
/// An implementation of `Contains` that checks for `Location` or
|
||||
@@ -51,3 +53,18 @@ impl<T: Get<NetworkId>> Contains<InteriorLocation> for StartsWithExplicitGlobalC
|
||||
matches!(location.global_consensus(), Ok(requested_network) if requested_network.eq(&T::get()))
|
||||
}
|
||||
}
|
||||
|
||||
/// An adapter implementation of `MaybeEquivalence` which can convert between the latest `Location`
|
||||
/// and other versions that implement `TryInto<Location>` and `TryFrom<Location>`.
|
||||
pub struct WithLatestLocationConverter<Target>(PhantomData<Target>);
|
||||
impl<Target: TryInto<Location> + TryFrom<Location> + Clone> MaybeEquivalence<Location, Target>
|
||||
for WithLatestLocationConverter<Target>
|
||||
{
|
||||
fn convert(old: &Location) -> Option<Target> {
|
||||
(*old).clone().try_into().ok()
|
||||
}
|
||||
|
||||
fn convert_back(new: &Target) -> Option<Location> {
|
||||
new.clone().try_into().ok()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user