use candid::{CandidType, Deserialize};
#[derive(CandidType, Clone, Debug, Deserialize, PartialEq)]
pub enum AssetClass {
Cryptocurrency,
FiatCurrency,
}
#[derive(CandidType, Clone, Debug, Deserialize, PartialEq)]
pub struct Asset {
pub symbol: String,
pub class: AssetClass,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct GetExchangeRateRequest {
pub base_asset: Asset,
pub quote_asset: Asset,
pub timestamp: Option<u64>,
}
#[derive(CandidType, Clone, Debug, Deserialize, PartialEq)]
pub struct ExchangeRateMetadata {
pub decimals: u32,
pub base_asset_num_queried_sources: usize,
pub base_asset_num_received_rates: usize,
pub quote_asset_num_queried_sources: usize,
pub quote_asset_num_received_rates: usize,
pub standard_deviation: u64,
pub forex_timestamp: Option<u64>,
}
#[derive(CandidType, Clone, Debug, Deserialize, PartialEq)]
pub struct ExchangeRate {
pub base_asset: Asset,
pub quote_asset: Asset,
pub timestamp: u64,
pub rate: u64,
pub metadata: ExchangeRateMetadata,
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub enum ExchangeRateError {
AnonymousPrincipalNotAllowed,
Pending,
CryptoBaseAssetNotFound,
CryptoQuoteAssetNotFound,
StablecoinRateNotFound,
StablecoinRateTooFewRates,
StablecoinRateZeroRate,
ForexInvalidTimestamp,
ForexBaseAssetNotFound,
ForexQuoteAssetNotFound,
ForexAssetsNotFound,
RateLimited,
NotEnoughCycles,
InconsistentRatesReceived,
Other(OtherError),
}
#[derive(CandidType, Clone, Debug, Deserialize)]
pub struct OtherError {
pub code: u32,
pub description: String,
}
pub type GetExchangeRateResult = Result<ExchangeRate, ExchangeRateError>;