1#![cfg_attr(not(feature = "std"), no_std)]
2
3use impl_trait_for_tuples::impl_for_tuples;
4use parity_scale_codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen};
5use sp_runtime::{DispatchResult, RuntimeDebug};
6use sp_std::{
7 cmp::{Eq, PartialEq},
8 prelude::Vec,
9};
10
11pub use asset_registry::{FixedConversionRateProvider, WeightToFeeConverter};
12pub use auction::{Auction, AuctionHandler, AuctionInfo, OnNewBidResult};
13pub use currency::{
14 BalanceStatus, BasicCurrency, BasicCurrencyExtended, BasicLockableCurrency, BasicReservableCurrency,
15 LockIdentifier, MultiCurrency, MultiCurrencyExtended, MultiLockableCurrency, MultiReservableCurrency,
16 NamedBasicReservableCurrency, NamedMultiReservableCurrency,
17};
18pub use data_provider::{DataFeeder, DataProvider, DataProviderExtended};
19pub use get_by_key::GetByKey;
20pub use multi_asset::ConcreteFungibleAsset;
21pub use nft::InspectExtended;
22pub use price::{DefaultPriceProvider, PriceProvider};
23pub use rate_limit::{RateLimiter, RateLimiterError};
24pub use rewards::RewardHandler;
25use scale_info::TypeInfo;
26#[cfg(feature = "std")]
27use serde::{Deserialize, Serialize};
28pub use xcm_transfer::{XcmTransfer, XtokensWeightInfo};
29
30pub mod arithmetic;
31pub mod asset_registry;
32pub mod auction;
33pub mod currency;
34pub mod data_provider;
35pub mod get_by_key;
36pub mod location;
37pub mod multi_asset;
38pub mod nft;
39pub mod parameters;
40pub mod price;
41pub mod rate_limit;
42pub mod rewards;
43pub mod xcm_transfer;
44
45#[impl_trait_for_tuples::impl_for_tuples(30)]
47pub trait OnNewData<AccountId, Key, Value> {
48 fn on_new_data(who: &AccountId, key: &Key, value: &Value);
50}
51
52pub trait CombineData<Key, TimestampedValue> {
54 fn combine_data(
56 key: &Key,
57 values: Vec<TimestampedValue>,
58 prev_value: Option<TimestampedValue>,
59 ) -> Option<TimestampedValue>;
60}
61
62#[derive(Encode, Decode, DecodeWithMemTracking, Clone, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)]
64pub enum Change<Value> {
65 NoChange,
67 NewValue(Value),
69}
70
71#[derive(Encode, Decode, DecodeWithMemTracking, RuntimeDebug, Eq, PartialEq, Ord, PartialOrd, Clone, Copy)]
72#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
73pub struct TimestampedValue<Value, Moment>
74where
75 Value: Ord + PartialOrd,
76{
77 pub value: Value,
78 pub timestamp: Moment,
79}
80
81#[impl_for_tuples(30)]
82pub trait Happened<T> {
83 fn happened(t: &T);
84}
85
86pub trait Handler<T> {
87 fn handle(t: &T) -> DispatchResult;
88}
89
90#[impl_for_tuples(30)]
91impl<T> Handler<T> for Tuple {
92 fn handle(t: &T) -> DispatchResult {
93 for_tuples!( #( Tuple::handle(t); )* );
94 Ok(())
95 }
96}