Browse Source

feat(lazer/adk): Add asset id (#3148)

* add asset id

* change asset id to string

* Revert "change asset id to string"

This reverts commit 8430929939b75b73ec1c0eebf53ec3bcdf088d77.

* add asset class enum

* make fn public

* remove unnecessary rename

* bump version

* add validation for dynamic value presence
Darun Seethammagari 2 weeks ago
parent
commit
3bb18ac249

+ 3 - 3
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",
 ]
 

+ 1 - 1
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"

+ 10 - 0
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:?}"),
+        }
+    }
+}

+ 33 - 0
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