v0.2.11-pre.010
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-offchain-transport-lib/src/lib.rs
|
||||
// version: 10
|
||||
// version: 11
|
||||
|
||||
#![warn(missing_docs)]
|
||||
#![deny(unreachable_pub)]
|
||||
@@ -7,10 +7,11 @@
|
||||
|
||||
//! KSP-owned off-chain transport foundation.
|
||||
//!
|
||||
//! `0.2.11-pre.008` adds the generic SOL/USD refresh service over the complete eight-provider adapter inventory. The service owns provider dispatch,
|
||||
//! non-blocking rate-limit/cooldown handling, provider-neutral availability transitions and individual/multiple/all refresh operations. Provider-specific setup
|
||||
//! remains confined to composition while runtime consumers operate only on opaque provider identifiers, registry projections and normalized outcomes. Config
|
||||
//! integration remains reserved for the next tranche.
|
||||
//! `0.2.11-pre.010` hardens the complete SOL/USD V1 surface over eight providers. The crate owns exact decimal normalization, provider adapters, hardened
|
||||
//! HTTP, non-blocking rate-limit/cooldown handling, provider-neutral registry/availability and individual/multiple/all refresh operations. Provider-specific
|
||||
//! setup remains confined to composition while runtime consumers can operate on opaque provider identifiers, registry projections and normalized outcomes.
|
||||
//! Config integration is implemented externally by `ksp-config-lib`; this crate remains independent from Config and never reads KSP environment variables
|
||||
//! directly.
|
||||
|
||||
mod constants;
|
||||
mod error;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-offchain-transport-lib/src/market_price_adapter.rs
|
||||
// version: 1
|
||||
// version: 2
|
||||
|
||||
//! Shared market-price adapter mechanics layered over crate-wide HTTP primitives.
|
||||
|
||||
@@ -153,3 +153,6 @@ fn retry_after_from_error(error: &ksp_core_lib::Error) -> std::option::Option<st
|
||||
}
|
||||
return std::option::Option::None;
|
||||
}
|
||||
#[cfg(test)]
|
||||
#[path = "../unit_tests/market_price_adapter.rs"]
|
||||
mod tests;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-offchain-transport-lib/src/market_price_coingecko.rs
|
||||
// version: 2
|
||||
// version: 3
|
||||
|
||||
//! CoinGecko SOL/USD market-price adapter using the official REST API directly through `reqwest`.
|
||||
|
||||
@@ -8,6 +8,7 @@ const COINGECKO_PROVIDER_ID: &str = "coingecko";
|
||||
const COINGECKO_SIMPLE_PRICE_URL: &str = "https://api.coingecko.com/api/v3/simple/price";
|
||||
|
||||
/// CoinGecko V1 access mode supported by Off-chain Transport.
|
||||
#[non_exhaustive]
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum MarketPriceCoinGeckoAccessMode {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-offchain-transport-lib/src/market_price_coinmarketcap.rs
|
||||
// version: 2
|
||||
// version: 3
|
||||
|
||||
//! CoinMarketCap SOL/USD market-price adapter using the current Simple Price V2 REST surface.
|
||||
|
||||
@@ -10,6 +10,7 @@ const COINMARKETCAP_PROVIDER_ID: &str = "coinmarketcap";
|
||||
const COINMARKETCAP_SOL_ID: u64 = 5_426;
|
||||
|
||||
/// CoinMarketCap V1 access mode supported by Off-chain Transport.
|
||||
#[non_exhaustive]
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum MarketPriceCoinMarketCapAccessMode {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-offchain-transport-lib/src/market_price_jupiter.rs
|
||||
// version: 1
|
||||
// version: 2
|
||||
|
||||
//! Jupiter Price V3 SOL/USD adapter using the current Developer Platform REST surface.
|
||||
|
||||
@@ -10,6 +10,7 @@ const JUPITER_SOL_DECIMALS: u8 = 9;
|
||||
const JUPITER_SOL_MINT: &str = "So11111111111111111111111111111111111111112";
|
||||
|
||||
/// Jupiter V1 access mode supported by Off-chain Transport.
|
||||
#[non_exhaustive]
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum MarketPriceJupiterAccessMode {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-offchain-transport-lib/src/market_price_provider.rs
|
||||
// version: 5
|
||||
// version: 6
|
||||
|
||||
/// Maximum UTF-8 byte length of one provider display name.
|
||||
pub const MARKET_PRICE_PROVIDER_DISPLAY_NAME_MAX_BYTES: usize = 96;
|
||||
@@ -7,6 +7,7 @@ pub const MARKET_PRICE_PROVIDER_DISPLAY_NAME_MAX_BYTES: usize = 96;
|
||||
pub const MARKET_PRICE_PROVIDER_ID_MAX_BYTES: usize = 64;
|
||||
|
||||
/// Only price pair exposed by the `0.2.11` V1 public contract.
|
||||
#[non_exhaustive]
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum MarketPricePair {
|
||||
@@ -25,6 +26,7 @@ impl MarketPricePair {
|
||||
}
|
||||
|
||||
/// Market-price semantics retained so normalized observations do not imply cross-provider equivalence.
|
||||
#[non_exhaustive]
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum MarketPriceSemantics {
|
||||
@@ -41,6 +43,7 @@ pub enum MarketPriceSemantics {
|
||||
}
|
||||
|
||||
/// Generic authentication capability exposed by one configured provider.
|
||||
#[non_exhaustive]
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum MarketPriceProviderAuthMode {
|
||||
@@ -53,6 +56,7 @@ pub enum MarketPriceProviderAuthMode {
|
||||
}
|
||||
|
||||
/// Scope to which a provider documents a request limit.
|
||||
#[non_exhaustive]
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum MarketPriceProviderRateLimitScope {
|
||||
@@ -67,6 +71,7 @@ pub enum MarketPriceProviderRateLimitScope {
|
||||
}
|
||||
|
||||
/// Shape of one generic provider request-limit capability.
|
||||
#[non_exhaustive]
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, serde::Serialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum MarketPriceProviderRateLimitKind {
|
||||
@@ -150,6 +155,7 @@ impl MarketPriceProviderRateLimit {
|
||||
}
|
||||
|
||||
/// Period used by one documented long-term provider quota.
|
||||
#[non_exhaustive]
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum MarketPriceProviderQuotaPeriod {
|
||||
@@ -160,6 +166,7 @@ pub enum MarketPriceProviderQuotaPeriod {
|
||||
}
|
||||
|
||||
/// Unit used by one documented long-term provider quota.
|
||||
#[non_exhaustive]
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum MarketPriceProviderQuotaUnit {
|
||||
@@ -386,6 +393,7 @@ impl MarketPriceProviderDescriptor {
|
||||
}
|
||||
|
||||
/// Generic runtime availability state exposed without provider-specific error parsing.
|
||||
#[non_exhaustive]
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(tag = "state", rename_all = "snake_case")]
|
||||
pub enum MarketPriceProviderAvailability {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-offchain-transport-lib/src/market_price_service.rs
|
||||
// version: 2
|
||||
// version: 3
|
||||
|
||||
//! Generic market-price refresh service owning provider dispatch and availability transitions.
|
||||
|
||||
@@ -9,6 +9,7 @@ const MARKET_PRICE_REFRESH_MAX_PROVIDERS: usize = 64;
|
||||
/// Provider-specific runtime setup consumed once by [`crate::MarketPriceService`].
|
||||
///
|
||||
/// This enum is intended for composition layers such as Config. Runtime consumers use the generic service methods and never need to branch on provider kinds.
|
||||
#[non_exhaustive]
|
||||
pub enum MarketPriceProviderSetup {
|
||||
/// Birdeye Standard setup.
|
||||
Birdeye(crate::MarketPriceBirdeyeSettings),
|
||||
|
||||
Reference in New Issue
Block a user