@@ -358,13 +358,13 @@ struct SubscriptionStatus {
358
358
/// "XBT/USD"
359
359
/// ]
360
360
///```
361
- #[ derive( Debug , Deserialize , Serialize , PartialEq , Default ) ]
362
- struct Book {
361
+ #[ derive( Debug , Deserialize , Serialize , PartialEq ) ]
362
+ struct PublicMessage {
363
363
/// Channel ID of subscription - deprecated, use channelName and pair
364
364
// #[serde(rename = "channelID")]
365
365
channel_id : usize ,
366
366
367
- levels : Levels ,
367
+ payload : Payload ,
368
368
369
369
/// Channel Name of subscription
370
370
// #[serde(rename = "channelName")]
@@ -374,15 +374,18 @@ struct Book {
374
374
pair : String ,
375
375
}
376
376
377
- #[ derive( Debug , Deserialize , Serialize , PartialEq , Default ) ]
378
- struct Levels {
379
- /// Array of price levels, ascending from best ask
380
- #[ serde( rename = "as" ) ]
381
- asks : Vec < Level > ,
382
-
383
- /// Array of price levels, descending from best bid
384
- #[ serde( rename = "bs" ) ]
385
- bids : Vec < Level > ,
377
+ #[ derive( Debug , Deserialize , Serialize , PartialEq ) ]
378
+ #[ serde( untagged) ]
379
+ enum Payload {
380
+ Book {
381
+ /// Array of price levels, ascending from best ask
382
+ #[ serde( rename = "as" ) ]
383
+ asks : Vec < Level > ,
384
+
385
+ /// Array of price levels, descending from best bid
386
+ #[ serde( rename = "bs" ) ]
387
+ bids : Vec < Level > ,
388
+ }
386
389
}
387
390
388
391
#[ derive( Debug , Deserialize , Serialize , PartialEq ) ]
@@ -545,7 +548,7 @@ fn deserialize_event(s: String) -> serde_json::Result<GeneralMessage> {
545
548
Ok ( serde_json:: from_str ( & s) ?)
546
549
}
547
550
548
- fn deserialize_book ( s : String ) -> serde_json:: Result < Book > {
551
+ fn deserialize_book ( s : String ) -> serde_json:: Result < PublicMessage > {
549
552
Ok ( serde_json:: from_str ( & s) ?)
550
553
}
551
554
@@ -593,10 +596,9 @@ mod test {
593
596
\" book-10\" ,\
594
597
\" ETH/XBT\" \
595
598
]". to_string( ) ) ?,
596
- Book {
597
- // Event::Book{
599
+ PublicMessage {
598
600
channel_id: 640 ,
599
- levels : Levels {
601
+ payload : Payload :: Book {
600
602
bids: vec![
601
603
Level { price: dec!( 0.067990 ) , volume: dec!( 29.35934962 ) , timestamp: dec!( 1652817780.853167 ) } ,
602
604
Level { price: dec!( 0.067980 ) , volume: dec!( 48.72763614 ) , timestamp: dec!( 1652817781.487388 ) } ,
@@ -640,7 +642,7 @@ mod test {
640
642
\" depth\" :10,\
641
643
\" name\" :\" book\" \
642
644
}\
643
- }". to_string( ) ) ?, GeneralMessage :: SubscriptionStatus {
645
+ }". to_string( ) ) ?, GeneralMessage :: SubscriptionStatus {
644
646
channel_name: "book-10" . to_string( ) ,
645
647
reqid: None ,
646
648
pair: Some ( "ETH/XBT" . to_string( ) ) ,
0 commit comments