diff --git a/Cargo.lock b/Cargo.lock index bf74245225..c51138bb1b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5712,7 +5712,7 @@ dependencies = [ "hex", "humantime-serde", "libsecp256k1 0.7.2", - "pyth-lazer-protocol 0.20.1", + "pyth-lazer-protocol 0.20.2", "reqwest 0.12.23", "serde", "serde_json", @@ -5747,7 +5747,7 @@ dependencies = [ [[package]] name = "pyth-lazer-protocol" -version = "0.20.1" +version = "0.20.2" dependencies = [ "alloy-primitives 0.8.25", "anyhow", @@ -5794,7 +5794,7 @@ dependencies = [ "fs-err", "protobuf", "protobuf-codegen", - "pyth-lazer-protocol 0.20.1", + "pyth-lazer-protocol 0.20.2", "serde_json", ] diff --git a/lazer/sdk/rust/protocol/Cargo.toml b/lazer/sdk/rust/protocol/Cargo.toml index 0005dadc0d..7177938363 100644 --- a/lazer/sdk/rust/protocol/Cargo.toml +++ b/lazer/sdk/rust/protocol/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pyth-lazer-protocol" -version = "0.20.1" +version = "0.20.2" edition = "2021" description = "Pyth Lazer SDK - protocol types." license = "Apache-2.0" diff --git a/lazer/sdk/rust/protocol/src/dynamic_value.rs b/lazer/sdk/rust/protocol/src/dynamic_value.rs index ab954311f1..6e6611db1e 100644 --- a/lazer/sdk/rust/protocol/src/dynamic_value.rs +++ b/lazer/sdk/rust/protocol/src/dynamic_value.rs @@ -1,6 +1,7 @@ use std::collections::BTreeMap; use crate::time::{DurationUs, TimestampUs}; +use anyhow::bail; use derive_more::From; use serde::{ ser::{SerializeMap, SerializeSeq}, @@ -54,3 +55,12 @@ impl Serialize for DynamicValue { } } } + +impl DynamicValue { + pub fn is_str(&self, field_name: &str) -> anyhow::Result<()> { + match self { + DynamicValue::String(_) => Ok(()), + _ => bail!("invalid value type for {field_name}: expected String, got {self:?}"), + } + } +} diff --git a/lazer/sdk/rust/protocol/src/lib.rs b/lazer/sdk/rust/protocol/src/lib.rs index fc580b44ef..994b4b6019 100644 --- a/lazer/sdk/rust/protocol/src/lib.rs +++ b/lazer/sdk/rust/protocol/src/lib.rs @@ -34,6 +34,11 @@ pub use crate::{ symbol_state::SymbolState, }; +#[derive( + Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize, From, Into, +)] +pub struct AssetId(pub u32); + #[derive( Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize, From, Into, )] @@ -84,6 +89,34 @@ pub enum PriceFeedProperty { // More fields may be added later. } +#[derive(Debug, Clone, Deserialize)] +#[serde(rename_all = "kebab-case")] +pub enum AssetClass { + Crypto, + Fx, + Equity, + Metal, + Rates, + Nav, + Commodity, + FundingRate, +} + +impl AssetClass { + pub fn as_str(&self) -> &'static str { + match self { + AssetClass::Crypto => "crypto", + AssetClass::Fx => "fx", + AssetClass::Equity => "equity", + AssetClass::Metal => "metal", + AssetClass::Rates => "rates", + AssetClass::Nav => "nav", + AssetClass::Commodity => "commodity", + AssetClass::FundingRate => "funding-rate", + } + } +} + // Operation and coefficient for converting value to mantissa. enum ExponentFactor { // mantissa = value * factor