1use crate::error;
5use std::io::Read;
6
7use serde::de::DeserializeOwned;
8use serde::Serialize;
9
10#[cfg(feature = "ron_enc")]
11pub use self::ron::Ron;
12
13#[cfg(feature = "yaml_enc")]
14pub use self::yaml::Yaml;
15
16#[cfg(feature = "bin_enc")]
17pub use self::bincode::Bincode;
18
19pub trait DeSerializer<T: Serialize + DeserializeOwned>:
74 std::default::Default + Send + Sync + Clone
75{
76 fn serialize(&self, val: &T) -> error::DeSerResult<Vec<u8>>;
78 fn deserialize<R: Read>(&self, s: R) -> error::DeSerResult<T>;
80}
81
82#[cfg(feature = "ron_enc")]
83mod ron {
84 use std::io::Read;
85
86 use serde::de::DeserializeOwned;
87 use serde::Serialize;
88
89 use ron::de::from_reader as from_ron_string;
90 use ron::ser::to_string_pretty as to_ron_string;
91 use ron::ser::PrettyConfig;
92
93 use crate::deser::DeSerializer;
94 use crate::error;
95
96 #[derive(Debug, Default, Clone)]
98 pub struct Ron;
99
100 impl<T: Serialize + DeserializeOwned> DeSerializer<T> for Ron {
101 fn serialize(&self, val: &T) -> error::DeSerResult<Vec<u8>> {
102 Ok(to_ron_string(val, PrettyConfig::default()).map(String::into_bytes)?)
103 }
104 fn deserialize<R: Read>(&self, s: R) -> error::DeSerResult<T> {
105 Ok(from_ron_string(s).map_err(|e| e.code)?)
106 }
107 }
108}
109
110#[cfg(feature = "yaml_enc")]
111mod yaml {
112 use std::io::Read;
113
114 use serde::de::DeserializeOwned;
115 use serde::Serialize;
116 use serde_yaml::{from_reader as from_yaml_string, to_string as to_yaml_string};
117
118 use crate::deser::DeSerializer;
119 use crate::error;
120
121 #[derive(Debug, Default, Clone)]
123 pub struct Yaml;
124
125 impl<T: Serialize + DeserializeOwned> DeSerializer<T> for Yaml {
126 fn serialize(&self, val: &T) -> error::DeSerResult<Vec<u8>> {
127 Ok(to_yaml_string(val).map(String::into_bytes)?)
128 }
129 fn deserialize<R: Read>(&self, s: R) -> error::DeSerResult<T> {
130 Ok(from_yaml_string(s)?)
131 }
132 }
133}
134
135#[cfg(feature = "bin_enc")]
136mod bincode {
137 use std::io::Read;
138
139 use bincode::{deserialize_from, serialize};
140 use serde::de::DeserializeOwned;
141 use serde::Serialize;
142
143 use crate::deser::DeSerializer;
144 use crate::error;
145
146 #[derive(Debug, Default, Clone)]
148 pub struct Bincode;
149
150 impl<T: Serialize + DeserializeOwned> DeSerializer<T> for Bincode {
151 fn serialize(&self, val: &T) -> error::DeSerResult<Vec<u8>> {
152 Ok(serialize(val)?)
153 }
154 fn deserialize<R: Read>(&self, s: R) -> error::DeSerResult<T> {
155 Ok(deserialize_from(s)?)
156 }
157 }
158}