1use std::io::Read;
2
3use serde::de::Deserialize;
4
5use crate::{Decoder, Error, Reader, Result};
6use crate::model::ModelFactory;
7
8#[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 let mut msg = ModelFactory::new();
17 decoder.decode_vec(bytes, &mut msg)?;
18
19 let data = msg.data.unwrap();
21 T::deserialize(data)
22}
23
24pub fn from_buffer<'de, T>(decoder: &mut Decoder, buffer: &[u8]) -> Result<(T, u64)>
27where
28 T: Deserialize<'de>,
29{
30 let mut msg = ModelFactory::new();
32 let n = decoder.decode_buffer(buffer, &mut msg)?;
33
34 let data = msg.data.unwrap();
36 let result = T::deserialize(data)?;
37 Ok((result, n))
38}
39
40pub fn from_slice<'de, T>(decoder: &mut Decoder, bytes: &[u8]) -> Result<T>
43where
44 T: Deserialize<'de>,
45{
46 let mut msg = ModelFactory::new();
48 decoder.decode_slice(bytes, &mut msg)?;
49
50 let data = msg.data.unwrap();
52 T::deserialize(data)
53}
54
55#[allow(unused)]
57pub fn from_bytes<'de, T>(decoder: &mut Decoder, bytes: &mut bytes::Bytes) -> Result<T>
58where
59 T: Deserialize<'de>,
60{
61 let mut msg = ModelFactory::new();
63 decoder.decode_bytes(bytes, &mut msg)?;
64
65 let data = msg.data.unwrap();
67 T::deserialize(data)
68}
69
70#[allow(unused)]
72pub fn from_reader<'de, T>(decoder: &mut Decoder, rdr: &mut impl Reader) -> Result<T>
73where
74 T: Deserialize<'de>,
75{
76 let mut msg = ModelFactory::new();
78 decoder.decode_reader(rdr, &mut msg)?;
79
80 let data = msg.data.unwrap();
82 T::deserialize(data)
83}
84
85#[allow(unused)]
87pub fn from_stream<'de, T>(decoder: &mut Decoder, rdr: &mut dyn Read) -> Result<T>
88where
89 T: Deserialize<'de>,
90{
91 let mut msg = ModelFactory::new();
93 decoder.decode_stream(rdr, &mut msg)?;
94
95 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}