use codec::FullCodec;
use sp_runtime::traits::{AtLeast32BitUnsigned, MaybeSerializeDeserialize};
use sp_std::{fmt::Debug, vec::Vec};
pub trait RewardHandler<AccountId, BlockNumber> {
type Share: AtLeast32BitUnsigned + Default + Copy + MaybeSerializeDeserialize + Debug;
type Balance: AtLeast32BitUnsigned + Default + Copy + MaybeSerializeDeserialize + Debug;
type PoolId: Copy + FullCodec;
type CurrencyId: FullCodec + Eq + PartialEq + Copy + MaybeSerializeDeserialize + Debug;
fn accumulate_reward(
now: BlockNumber,
callback: impl FnMut(Self::PoolId, Self::Balance),
) -> Vec<(Self::CurrencyId, Self::Balance)>;
fn payout(who: &AccountId, pool: Self::PoolId, amount: Self::Balance);
}