use anchor_lang::prelude::error_code;
#[error_code]
pub enum CoreError {
#[msg("Cannot decrement TotalSolCache due to outdated epoch.")]
TotalSolCacheDecrement = 7000,
#[msg("Cannot increment TotalSolCache due to outdated epoch.")]
TotalSolCacheIncrement,
#[msg("Increment overflow in TotalSolCache.")]
TotalSolCacheOverflow,
#[msg("Decrement underflow in TotalSolCache.")]
TotalSolCacheUnderflow,
#[msg("TotalSolCache is not valid for the current epoch.")]
TotalSolCacheOutdated,
#[msg("Underflow in delta between current and previous LST prices.")]
LstSolPriceDelta,
#[msg("LstSolPrice delta failed due to non-adjacent epochs.")]
LstSolPriceEpochOrder,
#[msg("Cached LstSolPrice is not from current epoch.")]
LstSolPriceOutdated,
#[msg("Overflow while computing LstSolPrice conversion.")]
LstSolPriceConversion,
#[msg("Oracle confidence interval is too wide.")]
PythOracleConfidence,
#[msg("Oracle exponent is out of range.")]
PythOracleExponent,
#[msg("Oracle yielded a negative price which can't be unsigned.")]
PythOracleNegativePrice,
#[msg("Oracle time is negative.")]
PythOracleNegativeTime,
#[msg("Oracle did not yield a price within the configured age window.")]
PythOracleOutdated,
#[msg("Oracle price is out of range.")]
PythOraclePriceRange,
#[msg("Oracle publish slot greater than current slot.")]
PythOracleSlotInvalid,
#[msg("Oracle price update is not fully verified.")]
PythOracleVerificationLevel,
#[msg("Overflow while computing collateral ratio.")]
CollateralRatio,
#[msg("Arithmetic error while computing max mintable stablecoin.")]
MaxMintable,
#[msg("Arithmetic error while computing max swappable stablecoin.")]
MaxSwappable,
#[msg("Arithmetic error while computing stability pool capitalization.")]
StabilityPoolCap,
#[msg("Arithmetic error while computing depegged stablecoin NAV.")]
StablecoinNav,
#[msg("Unable to compute max mintable stablecoin with target CR < 1.")]
TargetCollateralRatioTooLow,
#[msg("Overflow while computing total value locked in USD.")]
TotalValueLocked,
#[msg("Over/underflow while computing acceptable token amount.")]
SlippageArithmetic,
#[msg("Token output amount exceeds provided slippage configuration.")]
SlippageExceeded,
#[msg("Stability modes failed validation.")]
StabilityValidation,
#[msg("Arithmetic error in conversion from levercoin to stablecoin.")]
LeverToStable,
#[msg("Arithmetic error in conversion from stablecoin to levercoin.")]
StableToLever,
#[msg("Arithmetic error in conversion from LST to protocol token.")]
LstToToken,
#[msg("Arithmetic error in conversion from protocol token to LST.")]
TokenToLst,
#[msg("Over/underflow while computing fee extraction for transaction.")]
FeeExtraction,
#[msg("No valid mint fee for levercoin. Projected stability mode is Depeg.")]
NoValidLevercoinMintFee,
#[msg("No valid redeem fee for levercoin due to Depeg.")]
NoValidLevercoinRedeemFee,
#[msg("No valid mint fee for stablecoin due to Mode2 or Depeg.")]
NoValidStablecoinMintFee,
#[msg("No valid fee for swap due to Mode2 or Depeg.")]
NoValidSwapFee,
#[msg("Fees cannot exceed configured maximum.")]
InvalidFees,
#[msg("Arithmetic error or missing data while computing levercoin NAV.")]
LevercoinNav,
#[msg("Over/underflow while computing total SOL for destination fee.")]
DestinationFeeSol,
#[msg(
"Over/underflow while computing total stablecoin for destination fee."
)]
DestinationFeeStablecoin,
#[msg("There is no next stability threshold; current mode is Depeg.")]
NoNextStabilityThreshold,
#[msg("Requested amount of stablecoin over max mintable limit.")]
RequestedStablecoinOverMaxMintable,
#[msg("Arithmetic error while computing LP token NAV.")]
LpTokenNav,
#[msg("Arithmetic error while computing LP token amount to give to user.")]
LpTokenOut,
#[msg("Arithmetic error while computing amount of stablecoin to swap.")]
StablecoinToSwap,
#[msg("Arithmetic error while computing amount of token to withdraw.")]
TokenWithdraw,
#[msg("Yield harvest configuration percentages failed validation.")]
YieldHarvestConfigValidation,
#[msg("Arithmetic error while computing yield harvest allocation.")]
YieldHarvestAllocation,
}