// Copyright (C) Parity Technologies (UK) Ltd. and Dijital Kurdistan Tech Institute // This file is part of Pezkuwi. // Pezkuwi is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Pezkuwi is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Pezkuwi. If not, see . use xcm::prelude::*; /// Handle stuff to do with taking fees in certain XCM instructions. pub trait FeeManager { /// Determine if a fee should be waived. fn is_waived(origin: Option<&Location>, r: FeeReason) -> bool; /// Do something with the fee which has been paid. Doing nothing here silently burns the /// fees. fn handle_fee(fee: Assets, context: Option<&XcmContext>, r: FeeReason); } /// Context under which a fee is paid. #[derive(Clone, Debug, Eq, PartialEq)] pub enum FeeReason { /// When a reporting instruction is called. Report, /// When the `TransferReserveAsset` instruction is called. TransferReserveAsset, /// When the `DepositReserveAsset` instruction is called. DepositReserveAsset, /// When the `InitiateReserveWithdraw` instruction is called. InitiateReserveWithdraw, /// When the `InitiateTeleport` instruction is called. InitiateTeleport, /// When the `InitiateTransfer` instruction is called. InitiateTransfer, /// When the `QueryPallet` instruction is called. QueryPallet, /// When the `ExportMessage` instruction is called (and includes the network ID). Export { network: NetworkId, destination: InteriorLocation }, /// The `charge_fees` API. ChargeFees, /// When the `LockAsset` instruction is called. LockAsset, /// When the `RequestUnlock` instruction is called. RequestUnlock, } impl FeeManager for () { fn is_waived(_: Option<&Location>, _: FeeReason) -> bool { false } fn handle_fee(_: Assets, _: Option<&XcmContext>, _: FeeReason) {} } pub struct WaiveDeliveryFees; impl FeeManager for WaiveDeliveryFees { fn is_waived(_: Option<&Location>, _: FeeReason) -> bool { true } fn handle_fee(_: Assets, _: Option<&XcmContext>, _: FeeReason) {} }