Skip to content

Commit 1054759

Browse files
committed
fix(lazer): expose dynamic_value protobuf as rust module, move type to protocol
1 parent f8c719b commit 1054759

File tree

7 files changed

+73
-63
lines changed

7 files changed

+73
-63
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lazer/publisher_sdk/rust/src/dynamic_value.rs renamed to lazer/publisher_sdk/rust/src/convert_dynamic_value.rs

Lines changed: 3 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,11 @@ use std::collections::BTreeMap;
66
use crate::protobuf::dynamic_value::{dynamic_value, DynamicValue as ProtobufDynamicValue};
77
use ::protobuf::MessageField;
88
use anyhow::{ensure, Context};
9-
use derive_more::From;
10-
use pyth_lazer_protocol::time::{DurationUs, TimestampUs};
11-
use serde::{
12-
ser::{SerializeMap, SerializeSeq},
13-
Serialize,
9+
use pyth_lazer_protocol::{
10+
time::{DurationUs, TimestampUs},
11+
DynamicValue,
1412
};
1513

16-
#[derive(Debug, Clone, PartialEq, From)]
17-
pub enum DynamicValue {
18-
String(String),
19-
F64(f64),
20-
U64(u64),
21-
I64(i64),
22-
Bool(bool),
23-
Timestamp(TimestampUs),
24-
Duration(DurationUs),
25-
Bytes(Vec<u8>),
26-
List(Vec<DynamicValue>),
27-
Map(BTreeMap<String, DynamicValue>),
28-
}
29-
3014
impl From<DynamicValue> for ProtobufDynamicValue {
3115
fn from(value: DynamicValue) -> Self {
3216
let converted = match value {
@@ -192,37 +176,3 @@ impl TryFrom<dynamic_value::List> for Vec<DynamicValue> {
192176
Ok(output)
193177
}
194178
}
195-
196-
impl Serialize for DynamicValue {
197-
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
198-
where
199-
S: serde::Serializer,
200-
{
201-
match self {
202-
DynamicValue::String(v) => serializer.serialize_str(v),
203-
DynamicValue::F64(v) => serializer.serialize_f64(*v),
204-
DynamicValue::U64(v) => serializer.serialize_u64(*v),
205-
DynamicValue::I64(v) => serializer.serialize_i64(*v),
206-
DynamicValue::Bool(v) => serializer.serialize_bool(*v),
207-
DynamicValue::Timestamp(v) => serializer.serialize_u64(v.as_micros()),
208-
DynamicValue::Duration(v) => {
209-
serializer.serialize_str(&humantime::format_duration((*v).into()).to_string())
210-
}
211-
DynamicValue::Bytes(v) => serializer.serialize_str(&hex::encode(v)),
212-
DynamicValue::List(v) => {
213-
let mut seq_serializer = serializer.serialize_seq(Some(v.len()))?;
214-
for element in v {
215-
seq_serializer.serialize_element(element)?;
216-
}
217-
seq_serializer.end()
218-
}
219-
DynamicValue::Map(map) => {
220-
let mut map_serializer = serializer.serialize_map(Some(map.len()))?;
221-
for (k, v) in map {
222-
map_serializer.serialize_entry(k, v)?;
223-
}
224-
map_serializer.end()
225-
}
226-
}
227-
}
228-
}

lazer/publisher_sdk/rust/src/dynamic_value/tests.rs renamed to lazer/publisher_sdk/rust/src/convert_dynamic_value/tests.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,11 @@ use protobuf::{
44
well_known_types::{duration::Duration, timestamp::Timestamp},
55
MessageField,
66
};
7+
use pyth_lazer_protocol::DynamicValue;
78

8-
use crate::{
9-
protobuf::dynamic_value::{
10-
dynamic_value::{List, Map, MapItem, Value},
11-
DynamicValue as ProtobufDynamicValue,
12-
},
13-
DynamicValue,
9+
use crate::protobuf::dynamic_value::{
10+
dynamic_value::{List, Map, MapItem, Value},
11+
DynamicValue as ProtobufDynamicValue,
1412
};
1513

1614
#[test]

lazer/publisher_sdk/rust/src/lib.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,16 @@ pub mod state {
2525
pub use crate::protobuf::state::*;
2626
}
2727

28+
pub mod dynamic_value {
29+
pub use crate::protobuf::dynamic_value::*;
30+
}
31+
2832
#[allow(rustdoc::broken_intra_doc_links)]
2933
mod protobuf {
3034
include!(concat!(env!("OUT_DIR"), "/protobuf/mod.rs"));
3135
}
3236

33-
mod dynamic_value;
34-
35-
pub use crate::dynamic_value::DynamicValue;
37+
mod convert_dynamic_value;
3638

3739
impl From<FeedUpdateParams> for FeedUpdate {
3840
fn from(value: FeedUpdateParams) -> Self {

lazer/sdk/rust/protocol/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ protobuf = "3.7.2"
1818
humantime-serde = "1.1.1"
1919
mry = { version = "0.13.0", features = ["serde"], optional = true }
2020
chrono = "0.4.41"
21+
humantime = "2.2.0"
22+
hex = "0.4.3"
2123

2224
[dev-dependencies]
2325
bincode = "1.3.3"
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
use std::collections::BTreeMap;
2+
3+
use crate::time::{DurationUs, TimestampUs};
4+
use derive_more::From;
5+
use serde::{
6+
ser::{SerializeMap, SerializeSeq},
7+
Serialize,
8+
};
9+
10+
#[derive(Debug, Clone, PartialEq, From)]
11+
pub enum DynamicValue {
12+
String(String),
13+
F64(f64),
14+
U64(u64),
15+
I64(i64),
16+
Bool(bool),
17+
Timestamp(TimestampUs),
18+
Duration(DurationUs),
19+
Bytes(Vec<u8>),
20+
List(Vec<DynamicValue>),
21+
Map(BTreeMap<String, DynamicValue>),
22+
}
23+
24+
impl Serialize for DynamicValue {
25+
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
26+
where
27+
S: serde::Serializer,
28+
{
29+
match self {
30+
DynamicValue::String(v) => serializer.serialize_str(v),
31+
DynamicValue::F64(v) => serializer.serialize_f64(*v),
32+
DynamicValue::U64(v) => serializer.serialize_u64(*v),
33+
DynamicValue::I64(v) => serializer.serialize_i64(*v),
34+
DynamicValue::Bool(v) => serializer.serialize_bool(*v),
35+
DynamicValue::Timestamp(v) => serializer.serialize_u64(v.as_micros()),
36+
DynamicValue::Duration(v) => {
37+
serializer.serialize_str(&humantime::format_duration((*v).into()).to_string())
38+
}
39+
DynamicValue::Bytes(v) => serializer.serialize_str(&hex::encode(v)),
40+
DynamicValue::List(v) => {
41+
let mut seq_serializer = serializer.serialize_seq(Some(v.len()))?;
42+
for element in v {
43+
seq_serializer.serialize_element(element)?;
44+
}
45+
seq_serializer.end()
46+
}
47+
DynamicValue::Map(map) => {
48+
let mut map_serializer = serializer.serialize_map(Some(map.len()))?;
49+
for (k, v) in map {
50+
map_serializer.serialize_entry(k, v)?;
51+
}
52+
map_serializer.end()
53+
}
54+
}
55+
}
56+
}

lazer/sdk/rust/protocol/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
33
pub mod api;
44
pub mod binary_update;
5+
mod dynamic_value;
56
mod feed_kind;
67
pub mod jrpc;
78
pub mod message;
@@ -14,7 +15,7 @@ pub mod subscription;
1415
pub mod symbol_state;
1516
pub mod time;
1617

17-
pub use crate::feed_kind::FeedKind;
18+
pub use crate::{dynamic_value::DynamicValue, feed_kind::FeedKind};
1819

1920
#[test]
2021
fn magics_in_big_endian() {

0 commit comments

Comments
 (0)