use crate::traits::{
AssetExchange, AssetLock, CallDispatcher, ConvertOrigin, EventEmitter, ExportXcm, FeeManager,
HandleHrmpChannelAccepted, HandleHrmpChannelClosing, HandleHrmpNewChannelOpenRequest,
OnResponse, ProcessTransaction, RecordXcm, ShouldExecute, TransactAsset, TrapAndClaimAssets,
VersionChangeNotifier, WeightBounds, WeightTrader,
};
use frame_support::{
dispatch::{GetDispatchInfo, Parameter, PostDispatchInfo},
traits::{Contains, ContainsPair, Get, PalletsInfoAccess},
};
use sp_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: TrapAndClaimAssets;
type AssetLocker: AssetLock;
type AssetExchanger: AssetExchange;
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;
}