v0.2.11-pre.009
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-offchain-transport-lib/src/market_price_dexscreener.rs
|
||||
// version: 1
|
||||
// version: 2
|
||||
|
||||
//! DexScreener SOL/USD adapter bound to one explicitly configured Solana pair address.
|
||||
|
||||
@@ -11,19 +11,26 @@ const DEXSCREENER_SOL_MINT: &str = "So11111111111111111111111111111111111111112"
|
||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||
pub struct MarketPriceDexScreenerSettings {
|
||||
common: crate::MarketPriceProviderCommonSettings,
|
||||
pair_address: ksp_core_lib::Pubkey,
|
||||
pair_address: std::option::Option<ksp_core_lib::Pubkey>,
|
||||
}
|
||||
|
||||
impl crate::MarketPriceDexScreenerSettings {
|
||||
/// Creates DexScreener settings for one explicit Solana pair address.
|
||||
pub fn new(enabled: bool, pair_address: impl std::convert::Into<std::string::String>) -> ksp_core_lib::Result<Self> {
|
||||
/// Creates DexScreener settings for one optional explicit Solana pair address.
|
||||
///
|
||||
/// An enabled provider requires a valid pair address. A disabled provider may omit it so Config does not need to fabricate provider data merely to keep the
|
||||
/// provider visible in the generic registry.
|
||||
pub fn new(enabled: bool, pair_address: std::option::Option<std::string::String>) -> ksp_core_lib::Result<Self> {
|
||||
let provider_id = match crate::MarketPriceProviderId::new(DEXSCREENER_PROVIDER_ID) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
let pair_address = match pair_address.into().parse::<ksp_core_lib::Pubkey>() {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(_) => return std::result::Result::Err(provider_settings_error("pair_address")),
|
||||
let pair_address = match pair_address {
|
||||
std::option::Option::Some(value) => match value.parse::<ksp_core_lib::Pubkey>() {
|
||||
std::result::Result::Ok(value) => std::option::Option::Some(value),
|
||||
std::result::Result::Err(_) => return std::result::Result::Err(provider_settings_error("pair_address")),
|
||||
},
|
||||
std::option::Option::None if enabled => return std::result::Result::Err(provider_settings_error("pair_address")),
|
||||
std::option::Option::None => std::option::Option::None,
|
||||
};
|
||||
let common = crate::MarketPriceProviderCommonSettings::new(provider_id, enabled);
|
||||
return std::result::Result::Ok(Self { common, pair_address });
|
||||
@@ -35,10 +42,10 @@ impl crate::MarketPriceDexScreenerSettings {
|
||||
return &self.common;
|
||||
}
|
||||
|
||||
/// Returns the explicit Solana pair address used by this adapter.
|
||||
/// Returns the explicit Solana pair address when one is configured.
|
||||
#[must_use]
|
||||
pub const fn pair_address(&self) -> &ksp_core_lib::Pubkey {
|
||||
return &self.pair_address;
|
||||
pub const fn pair_address(&self) -> std::option::Option<&ksp_core_lib::Pubkey> {
|
||||
return self.pair_address.as_ref();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,11 +91,15 @@ impl crate::MarketPriceDexScreenerProvider {
|
||||
if let std::result::Result::Err(error) = crate::admit_request(DEXSCREENER_PROVIDER_ID, &self.admission) {
|
||||
return std::result::Result::Err(error);
|
||||
}
|
||||
let pair_address = match self.settings.pair_address() {
|
||||
std::option::Option::Some(value) => value,
|
||||
std::option::Option::None => return std::result::Result::Err(provider_settings_error("pair_address")),
|
||||
};
|
||||
let request_started_at = match crate::current_timestamp() {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
let request = match build_request(self.settings.pair_address()) {
|
||||
let request = match build_request(pair_address) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
@@ -100,13 +111,7 @@ impl crate::MarketPriceDexScreenerProvider {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
return parse_response(
|
||||
document.as_bytes(),
|
||||
self.settings.common().provider_id().clone(),
|
||||
self.settings.pair_address(),
|
||||
request_started_at,
|
||||
received_at,
|
||||
);
|
||||
return parse_response(document.as_bytes(), self.settings.common().provider_id().clone(), pair_address, request_started_at, received_at);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user