use crate::decimals::PositiveDecimal;
use crate::define_enum;
use crate::time::UnixTimestampMicros;
use crate::types::{AdminType, AssetId, FeeTier, MarketId};
mod args;
pub use args::*;
define_enum! {
enum KeeperAction<Address> {
UpdateOraclePrices {
prices: Vec<OraclePriceUpdateArgs>,
publish_timestamp: UnixTimestampMicros,
} = 0,
UpdateMarkPrices {
prices: Vec<MarkPriceUpdateArgs>,
publish_timestamp: UnixTimestampMicros,
} = 1,
UpdatePremiumIndexes { market_ids: Vec<MarketId> } = 2,
UpdateFunding { market_ids: Vec<MarketId> } = 10,
AddTradingCredits {
user_address: Address,
amount: PositiveDecimal,
} = 20,
RemoveTradingCredits {
user_address: Address,
amount: PositiveDecimal,
} = 21,
UpdateUserFeeTier { address: Address, fee_tier: FeeTier } = 30,
UpdateUserFeeDiscountBps {
address: Address,
fee_discount_bps: u16,
} = 31,
SetCumulativeReferralRewards {
address: Address,
asset_id: AssetId,
amount: PositiveDecimal,
} = 40,
}
}
impl<Address> KeeperAction<Address> {
#[must_use]
pub fn required_admin_type(&self) -> AdminType {
match self {
Self::UpdateOraclePrices { .. }
| Self::UpdateMarkPrices { .. }
| Self::UpdatePremiumIndexes { .. } => AdminType::Pricing,
Self::UpdateFunding { .. } => AdminType::Funding,
Self::AddTradingCredits { .. } | Self::RemoveTradingCredits { .. } => {
AdminType::Credits
}
Self::UpdateUserFeeTier { .. } | Self::UpdateUserFeeDiscountBps { .. } => {
AdminType::FeeTier
}
Self::SetCumulativeReferralRewards { .. } => AdminType::Referrals,
}
}
}