pyth_sdk_terra/
lib.rs

1use cosmwasm_std::{
2    to_binary,
3    Addr,
4    QuerierWrapper,
5    QueryRequest,
6    StdResult,
7    WasmQuery,
8};
9use schemars::JsonSchema;
10use serde::{
11    Deserialize,
12    Serialize,
13};
14
15pub use pyth_sdk::{
16    Price,
17    PriceFeed,
18    PriceIdentifier,
19    PriceStatus,
20    ProductIdentifier,
21};
22
23#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
24#[serde(rename_all = "snake_case")]
25pub enum QueryMsg {
26    PriceFeed { id: PriceIdentifier },
27}
28
29#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
30#[serde(rename_all = "snake_case")]
31pub struct PriceFeedResponse {
32    /// Pyth Price Feed
33    pub price_feed: PriceFeed,
34}
35
36/// Queries the price on-chain
37pub fn query_price_feed(
38    querier: &QuerierWrapper,
39    contract_addr: Addr,
40    id: PriceIdentifier,
41) -> StdResult<PriceFeedResponse> {
42    let price_feed_response = querier.query(&QueryRequest::Wasm(WasmQuery::Smart {
43        contract_addr: contract_addr.into_string(),
44        msg:           to_binary(&QueryMsg::PriceFeed { id })?,
45    }))?;
46    Ok(price_feed_response)
47}