fastlib/
de.rs

1use std::io::Read;
2
3use serde::de::Deserialize;
4
5use crate::{Decoder, Error, Reader, Result};
6use crate::model::ModelFactory;
7
8/// Decode single message from `Vec<u8>`.
9#[deprecated(since = "0.3.4", note = "use from_buffer() or from_slice() instead")]
10#[allow(deprecated)]
11pub fn from_vec<'de, T>(decoder: &mut Decoder, bytes: Vec<u8>) -> Result<T>
12where
13    T: Deserialize<'de>,
14{
15    // Decode FAST message into internal data model
16    let mut msg = ModelFactory::new();
17    decoder.decode_vec(bytes, &mut msg)?;
18
19    // Deserialize from internal data model into user data type
20    let data = msg.data.unwrap();
21    T::deserialize(data)
22}
23
24/// Decode single message from buffer.
25/// Returns the decoded message and number of bytes consumed.
26pub fn from_buffer<'de, T>(decoder: &mut Decoder, buffer: &[u8]) -> Result<(T, u64)>
27where
28    T: Deserialize<'de>,
29{
30    // Decode FAST message into internal data model
31    let mut msg = ModelFactory::new();
32    let n = decoder.decode_buffer(buffer, &mut msg)?;
33
34    // Deserialize from internal data model into user data type
35    let data = msg.data.unwrap();
36    let result = T::deserialize(data)?;
37    Ok((result, n))
38}
39
40/// Decode single message from buffer.
41/// The `bytes` slice must be consumed completely. It is an error if any bytes left after the message is decoded.
42pub fn from_slice<'de, T>(decoder: &mut Decoder, bytes: &[u8]) -> Result<T>
43where
44    T: Deserialize<'de>,
45{
46    // Decode FAST message into internal data model
47    let mut msg = ModelFactory::new();
48    decoder.decode_slice(bytes, &mut msg)?;
49
50    // Deserialize from internal data model into user data type
51    let data = msg.data.unwrap();
52    T::deserialize(data)
53}
54
55/// Decode single message from `bytes::Bytes`.
56#[allow(unused)]
57pub fn from_bytes<'de, T>(decoder: &mut Decoder, bytes: &mut bytes::Bytes) -> Result<T>
58where
59    T: Deserialize<'de>,
60{
61    // Decode FAST message into internal data model
62    let mut msg = ModelFactory::new();
63    decoder.decode_bytes(bytes, &mut msg)?;
64
65    // Deserialize from internal data model into user data type
66    let data = msg.data.unwrap();
67    T::deserialize(data)
68}
69
70/// Decode single message from object that implements `fastlib::Reader` trait.
71#[allow(unused)]
72pub fn from_reader<'de, T>(decoder: &mut Decoder, rdr: &mut impl Reader) -> Result<T>
73where
74    T: Deserialize<'de>,
75{
76    // Decode FAST message into internal data model
77    let mut msg = ModelFactory::new();
78    decoder.decode_reader(rdr, &mut msg)?;
79
80    // Deserialize from internal data model into user data type
81    let data = msg.data.unwrap();
82    T::deserialize(data)
83}
84
85/// Decode single message from object that implements `std::io::Read` trait.
86#[allow(unused)]
87pub fn from_stream<'de, T>(decoder: &mut Decoder, rdr: &mut dyn Read) -> Result<T>
88where
89    T: Deserialize<'de>,
90{
91    // Decode FAST message into internal data model
92    let mut msg = ModelFactory::new();
93    decoder.decode_stream(rdr, &mut msg)?;
94
95    // Deserialize from internal data model into user data type
96    let data = msg.data.unwrap();
97    T::deserialize(data)
98}
99
100
101impl serde::de::Error for Error {
102    fn custom<T: std::fmt::Display>(msg: T) -> Self {
103        Self::Runtime(msg.to_string())
104    }
105}