use crate::traits::{
AssetExchange, AssetLock, CallDispatcher, ClaimAssets, ConvertOrigin, DropAssets, EventEmitter,
ExportXcm, FeeManager, HandleHrmpChannelAccepted, HandleHrmpChannelClosing,
HandleHrmpNewChannelOpenRequest, OnResponse, ProcessTransaction, RecordXcm, ShouldExecute,
TransactAsset, VersionChangeNotifier, WeightBounds, WeightTrader,
};
use pezframe_support::{
dispatch::{GetDispatchInfo, Parameter, PostDispatchInfo},
traits::{Contains, ContainsPair, Get, PalletsInfoAccess},
};
use pezsp_runtime::traits::Dispatchable;
use xcm::prelude::*;
pub trait Config {
type RuntimeCall: Parameter + Dispatchable<PostInfo = PostDispatchInfo> + GetDispatchInfo;
type XcmSender: SendXcm;
type XcmEventEmitter: EventEmitter;
type AssetTransactor: TransactAsset;
type OriginConverter: ConvertOrigin<<Self::RuntimeCall as Dispatchable>::RuntimeOrigin>;
type IsReserve: ContainsPair<Asset, Location>;
type IsTeleporter: ContainsPair<Asset, Location>;
type Aliasers: ContainsPair<Location, Location>;
type UniversalLocation: Get<InteriorLocation>;
type Barrier: ShouldExecute;
type Weigher: WeightBounds<Self::RuntimeCall>;
type Trader: WeightTrader;
type ResponseHandler: OnResponse;
type AssetTrap: DropAssets;
type AssetLocker: AssetLock;
type AssetExchanger: AssetExchange;
type AssetClaims: ClaimAssets;
type SubscriptionService: VersionChangeNotifier;
type PalletInstancesInfo: PalletsInfoAccess;
type MaxAssetsIntoHolding: Get<u32>;
type FeeManager: FeeManager;
type MessageExporter: ExportXcm;
type UniversalAliases: Contains<(Location, Junction)>;
type CallDispatcher: CallDispatcher<Self::RuntimeCall>;
type SafeCallFilter: Contains<Self::RuntimeCall>;
type TransactionalProcessor: ProcessTransaction;
type HrmpNewChannelOpenRequestHandler: HandleHrmpNewChannelOpenRequest;
type HrmpChannelAcceptedHandler: HandleHrmpChannelAccepted;
type HrmpChannelClosingHandler: HandleHrmpChannelClosing;
type XcmRecorder: RecordXcm;
}