use crate::local_and_foreign_assets::ForeignAssetReserveData;
use core::{fmt::Debug, marker::PhantomData};
use cumulus_primitives_core::ParaId;
use sp_runtime::traits::Get;
use xcm::latest::prelude::*;
pub struct LocationAssetsBenchmarkHelper;
#[cfg(feature = "runtime-benchmarks")]
impl pallet_assets::BenchmarkHelper<xcm::v5::Location, ForeignAssetReserveData>
for LocationAssetsBenchmarkHelper
{
fn create_asset_id_parameter(id: u32) -> xcm::v5::Location {
xcm::v5::Location::new(1, [xcm::v5::Junction::Parachain(id)])
}
fn create_reserve_id_parameter(id: u32) -> ForeignAssetReserveData {
(xcm::v5::Location::new(1, [xcm::v5::Junction::Parachain(id)]), false).into()
}
}
pub struct AssetPairFactory<Target, SelfParaId, PalletId, L = Location>(
PhantomData<(Target, SelfParaId, PalletId, L)>,
);
impl<Target: Get<L>, SelfParaId: Get<ParaId>, PalletId: Get<u32>, L: TryFrom<Location> + Debug>
pallet_asset_conversion::BenchmarkHelper<L> for AssetPairFactory<Target, SelfParaId, PalletId, L>
where
<L as TryFrom<Location>>::Error: Debug,
{
fn create_pair(seed1: u32, seed2: u32) -> (L, L) {
let with_id = Location::new(
1,
[
Parachain(SelfParaId::get().into()),
PalletInstance(PalletId::get() as u8),
GeneralIndex(seed2.into()),
],
);
if seed1 % 2 == 0 {
(
with_id
.try_into()
.map_err(|error| {
tracing::error!(
target: "xcm",
?error,
"Failed to create asset pairs when seed1 is even",
);
"Something went wrong"
})
.unwrap(),
Target::get(),
)
} else {
(
Target::get(),
with_id
.try_into()
.map_err(|error| {
tracing::error!(target: "xcm", ?error, "Failed to create asset pairs");
"Something went wrong"
})
.unwrap(),
)
}
}
}