Skip to main content

futu_backend/
stock_note_push.rs

1//! Typed wire decoder for Desktop CMD9430 stock-note change pushes.
2
3use futu_core::error::{FutuError, Result};
4use prost::Message;
5
6#[derive(Debug, Clone, PartialEq, Eq)]
7pub struct StockNotePushItem {
8    pub stock_id: Option<u64>,
9    pub title: Option<String>,
10    pub is_display: Option<u32>,
11}
12
13#[derive(Debug, Clone, PartialEq, Eq)]
14pub struct StockNoteChangedPush {
15    pub uid: Option<u64>,
16    pub operation: Option<u32>,
17    pub item: Option<StockNotePushItem>,
18}
19
20pub fn decode_stock_note_changed_push(body: &[u8]) -> Result<StockNoteChangedPush> {
21    let wire = crate::proto_internal::stock_note_svr::NoteChangePush::decode(body)
22        .map_err(|error| FutuError::Codec(format!("CMD9430 decode: {error}")))?;
23    Ok(StockNoteChangedPush {
24        uid: wire.uid,
25        operation: wire.ops_type,
26        item: wire.note_item.map(|item| StockNotePushItem {
27            stock_id: item.stock_id,
28            title: item.title,
29            is_display: item.is_display,
30        }),
31    })
32}
33
34#[cfg(test)]
35#[path = "stock_note_push_tests.rs"]
36mod tests;