pub enum L2BookUpdate {
Snapshot(L2BookSnapshot),
Diff(L2BookDiff),
}Expand description
To build a book from a stream of updates, the client should first subscribe to this update stream, which then returns a stream starting with a snapshot and following with diffs.
Diffs should be applied consecutively to the snapshot in order to reconstruct the state of the book.
/// Suppose we receive this snapshot from the server:
let snapshot: L2BookUpdate = serde_json::from_str(r#"{
"t": "s",
"ts": 1729700837,
"tn": 0,
"sid": 123,
"sn": 8999,
"b": [["99.00", "3"], ["98.78", "2"]],
"a": [["100.00", "1"], ["100.10", "2"]]
}"#)?;
/// It corresponds to the following book:
let mut book = BTreeMap::new();
book.insert(dec!(99.00), 3);
book.insert(dec!(98.78), 2);
book.insert(dec!(100.00), 1);
book.insert(dec!(100.10), 2);
/// Then we receive this update:
let diff: L2BookUpdate = serde_json::from_str(r#"{
"t": "d",
"ts": 1729700839,
"tn": 0,
"sid": 123,
"sn": 9000,
"b": [["99.00", "1"]],
"a": []
}"#)?;
/// Verify that the sequence number is correct
assert!(diff.sequence().is_next_in_sequence(&snapshot.sequence()));
/// Apply the update to our book
book.insert(dec!(99.00), 1);
// Suppose we then receive this update:
let diff: L2BookUpdate = serde_json::from_str(r#"{
"t": "d",
"ts": 1729700841,
"tn": 0,
"sid": 123,
"sn": 9005,
"b": [],
"a": [["103.00", "1"]]
}"#)?;
/// We shouldn't apply this update because it's not next in sequence!
assert_eq!(diff.sequence().is_next_in_sequence(&snapshot.sequence()), false);
/// Or if we had received this update:
let diff: L2BookUpdate = serde_json::from_str(r#"{
"t": "d",
"ts": 1729700841,
"tn": 0,
"sid": 170,
"sn": 9001,
"b": [],
"a": [["103.00", "1"]]
}"#)?;
/// It appears that the sequence id is changed, signalling a new sequence.
/// In this case, we should re-request the snapshot from the server.
assert_eq!(diff.sequence().is_next_in_sequence(&snapshot.sequence()), false);
Variants§
Snapshot(L2BookSnapshot)
Diff(L2BookDiff)
Implementations§
Source§impl L2BookUpdate
impl L2BookUpdate
Trait Implementations§
Source§impl Clone for L2BookUpdate
impl Clone for L2BookUpdate
Source§fn clone(&self) -> L2BookUpdate
fn clone(&self) -> L2BookUpdate
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for L2BookUpdate
impl Debug for L2BookUpdate
Source§impl<'de> Deserialize<'de> for L2BookUpdate
impl<'de> Deserialize<'de> for L2BookUpdate
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl JsonSchema for L2BookUpdate
impl JsonSchema for L2BookUpdate
Source§fn schema_name() -> String
fn schema_name() -> String
The name of the generated JSON Schema. Read more
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Returns a string that uniquely identifies the schema produced by this type. Read more
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Generates a JSON Schema for this type. Read more
Source§fn is_referenceable() -> bool
fn is_referenceable() -> bool
Whether JSON Schemas generated for this type should be re-used where possible using the
$ref keyword. Read moreAuto Trait Implementations§
impl Freeze for L2BookUpdate
impl RefUnwindSafe for L2BookUpdate
impl Send for L2BookUpdate
impl Sync for L2BookUpdate
impl Unpin for L2BookUpdate
impl UnwindSafe for L2BookUpdate
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more