From 51b0d50d57b0ffcf409c1ca4f62e01578421718f Mon Sep 17 00:00:00 2001 From: Darun Seethammagari Date: Tue, 21 Oct 2025 16:33:09 -0700 Subject: [PATCH 1/8] add asset id --- lazer/sdk/rust/protocol/src/lib.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lazer/sdk/rust/protocol/src/lib.rs b/lazer/sdk/rust/protocol/src/lib.rs index fc580b44ef..c54afdef1a 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, )] From 18917ddfbacfa0a13ce6ab3edcf4449f8d5502d7 Mon Sep 17 00:00:00 2001 From: Darun Seethammagari Date: Wed, 29 Oct 2025 12:30:35 -0700 Subject: [PATCH 2/8] change asset id to string --- lazer/sdk/rust/protocol/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lazer/sdk/rust/protocol/src/lib.rs b/lazer/sdk/rust/protocol/src/lib.rs index c54afdef1a..938a0fec52 100644 --- a/lazer/sdk/rust/protocol/src/lib.rs +++ b/lazer/sdk/rust/protocol/src/lib.rs @@ -35,9 +35,9 @@ pub use crate::{ }; #[derive( - Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize, From, Into, + Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize, From, Into, )] -pub struct AssetId(pub u32); +pub struct AssetId(pub String); #[derive( Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize, From, Into, From 74ef5af204e8aba0547af2eea57d3a68d837afda Mon Sep 17 00:00:00 2001 From: Darun Seethammagari Date: Wed, 29 Oct 2025 12:57:59 -0700 Subject: [PATCH 3/8] Revert "change asset id to string" This reverts commit 8430929939b75b73ec1c0eebf53ec3bcdf088d77. --- lazer/sdk/rust/protocol/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lazer/sdk/rust/protocol/src/lib.rs b/lazer/sdk/rust/protocol/src/lib.rs index 938a0fec52..c54afdef1a 100644 --- a/lazer/sdk/rust/protocol/src/lib.rs +++ b/lazer/sdk/rust/protocol/src/lib.rs @@ -35,9 +35,9 @@ pub use crate::{ }; #[derive( - Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize, From, Into, + Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize, From, Into, )] -pub struct AssetId(pub String); +pub struct AssetId(pub u32); #[derive( Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize, From, Into, From fd92e1bce6540001f1b1ca5de95908dc2ab1c524 Mon Sep 17 00:00:00 2001 From: Darun Seethammagari Date: Wed, 29 Oct 2025 15:58:32 -0700 Subject: [PATCH 4/8] add asset class enum --- lazer/sdk/rust/protocol/src/lib.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/lazer/sdk/rust/protocol/src/lib.rs b/lazer/sdk/rust/protocol/src/lib.rs index c54afdef1a..5dd0cf6e94 100644 --- a/lazer/sdk/rust/protocol/src/lib.rs +++ b/lazer/sdk/rust/protocol/src/lib.rs @@ -89,6 +89,35 @@ 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, + #[serde(rename = "funding-rate")] + FundingRate, +} + +impl AssetClass { + 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 From 29e4fb124f975e2a5bc1411185c1948437076adf Mon Sep 17 00:00:00 2001 From: Darun Seethammagari Date: Mon, 3 Nov 2025 09:45:00 -0800 Subject: [PATCH 5/8] make fn public --- lazer/sdk/rust/protocol/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lazer/sdk/rust/protocol/src/lib.rs b/lazer/sdk/rust/protocol/src/lib.rs index 5dd0cf6e94..83f022de23 100644 --- a/lazer/sdk/rust/protocol/src/lib.rs +++ b/lazer/sdk/rust/protocol/src/lib.rs @@ -104,7 +104,7 @@ pub enum AssetClass { } impl AssetClass { - fn as_str(&self) -> &'static str { + pub fn as_str(&self) -> &'static str { match self { AssetClass::Crypto => "crypto", AssetClass::Fx => "fx", From 33d36a7e6b2852e377213009a448d2436b992545 Mon Sep 17 00:00:00 2001 From: Darun Seethammagari Date: Tue, 4 Nov 2025 17:25:30 -0800 Subject: [PATCH 6/8] remove unnecessary rename --- lazer/sdk/rust/protocol/src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/lazer/sdk/rust/protocol/src/lib.rs b/lazer/sdk/rust/protocol/src/lib.rs index 83f022de23..994b4b6019 100644 --- a/lazer/sdk/rust/protocol/src/lib.rs +++ b/lazer/sdk/rust/protocol/src/lib.rs @@ -99,7 +99,6 @@ pub enum AssetClass { Rates, Nav, Commodity, - #[serde(rename = "funding-rate")] FundingRate, } From 6f6816c6dcecb2166482b18be313c38341b814a7 Mon Sep 17 00:00:00 2001 From: Darun Seethammagari Date: Tue, 4 Nov 2025 17:26:24 -0800 Subject: [PATCH 7/8] bump version --- Cargo.lock | 6 +++--- lazer/sdk/rust/protocol/Cargo.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) 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" From 868b71ed9486cfb351c839f5eaf1dbb0e0443823 Mon Sep 17 00:00:00 2001 From: Darun Seethammagari Date: Wed, 5 Nov 2025 10:23:41 -0800 Subject: [PATCH 8/8] add validation for dynamic value presence --- lazer/sdk/rust/protocol/src/dynamic_value.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) 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:?}"), + } + } +}