1use 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 fn serialize<B>(&self, buffer: &mut B) -> Result<usize>
22 where
23 B: BufMut;
24
25 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}