orml_traits/
lib.rs

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/// New data handler
46#[impl_trait_for_tuples::impl_for_tuples(30)]
47pub trait OnNewData<AccountId, Key, Value> {
48	/// New data is available
49	fn on_new_data(who: &AccountId, key: &Key, value: &Value);
50}
51
52/// Combine data provided by operators
53pub trait CombineData<Key, TimestampedValue> {
54	/// Combine data provided by operators
55	fn combine_data(
56		key: &Key,
57		values: Vec<TimestampedValue>,
58		prev_value: Option<TimestampedValue>,
59	) -> Option<TimestampedValue>;
60}
61
62/// Indicate if should change a value
63#[derive(Encode, Decode, DecodeWithMemTracking, Clone, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)]
64pub enum Change<Value> {
65	/// No change.
66	NoChange,
67	/// Changed to new value.
68	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}