dolphindb/
lib.rs

1//! DolphinDB Client SDK
2//!
3//! See [DolphinDB docs](https://docs.dolphindb.cn/zh/rustdoc/index.html) for more information.
4
5use bytes::BufMut;
6use tokio::io::AsyncBufReadExt;
7
8pub mod client;
9pub mod error;
10mod request;
11mod response;
12pub mod stream_client;
13pub mod types;
14
15use error::Result;
16
17pub use request::BehaviorOptions;
18
19pub(crate) trait Serialize {
20    /// serialize data to buffer, may return length that should be written into commandLength field
21    fn serialize<B>(&self, buffer: &mut B) -> Result<usize>
22    where
23        B: BufMut;
24
25    /// similar to `serialize()`, but in little endian.
26    fn serialize_le<B>(&self, buffer: &mut B) -> Result<usize>
27    where
28        B: BufMut,
29    {
30        self.serialize(buffer)
31    }
32}
33
34pub(crate) trait Deserialize {
35    async fn deserialize<R>(&mut self, reader: &mut R) -> Result<()>
36    where
37        R: AsyncBufReadExt + Unpin;
38
39    async fn deserialize_le<R>(&mut self, reader: &mut R) -> Result<()>
40    where
41        R: AsyncBufReadExt + Unpin,
42    {
43        self.deserialize(reader).await
44    }
45}
46
47#[derive(Clone, Copy, Default, Debug)]
48pub(crate) enum Endian {
49    #[default]
50    Little,
51    Big,
52}
53
54impl Serialize for Endian {
55    fn serialize<B>(&self, buffer: &mut B) -> Result<usize>
56    where
57        B: bytes::BufMut,
58    {
59        match self {
60            Endian::Little => buffer.put_u8(b'1'),
61            Endian::Big => buffer.put_u8(b'0'),
62        };
63
64        Ok(0)
65    }
66}