1#![deny(
6 future_incompatible,
7 nonstandard_style,
8 rust_2018_compatibility,
9 rust_2018_idioms,
10 unused,
11 warnings
12)]
13#![deny(
14 absolute_paths_not_starting_with_crate,
15 deprecated_in_future,
16 elided_lifetimes_in_paths,
17 explicit_outlives_requirements,
18 keyword_idents,
19 macro_use_extern_crate,
20 meta_variable_misuse,
21 missing_abi,
22 missing_copy_implementations,
23 missing_debug_implementations,
24 missing_docs,
25 non_ascii_idents,
26 noop_method_call,
27 rust_2021_incompatible_or_patterns,
28 semicolon_in_expressions_from_macros,
29 single_use_lifetimes,
30 trivial_casts,
31 trivial_numeric_casts,
32 unreachable_pub,
33 unsafe_code,
34 unsafe_op_in_unsafe_fn,
35 unstable_features,
36 unused_crate_dependencies,
37 unused_extern_crates,
38 unused_import_braces,
39 unused_lifetimes,
40 unused_qualifications,
41 unused_results,
42 variant_size_differences
43)]
44#![deny(
45 clippy::all,
46 clippy::cargo,
47 clippy::nursery,
48 clippy::pedantic,
49 clippy::missing_safety_doc,
50 clippy::missing_docs_in_private_items
51)]
52#![deny(
53 rustdoc::bare_urls,
54 rustdoc::broken_intra_doc_links,
55 rustdoc::invalid_codeblock_attributes,
56 rustdoc::invalid_html_tags,
57 rustdoc::missing_crate_level_docs,
58 rustdoc::private_doc_tests,
59 rustdoc::private_intra_doc_links
60)]
61
62pub mod error;
64pub use error::{Error, Result};
65
66#[cfg(feature = "wincode")]
69mod wincode;
70#[cfg(feature = "wincode")]
71pub use crate::wincode::Builder as WincodeBuilder;
72
73mod buffered;
76pub use buffered::Builder as BufferedBuilder;
77
78mod file;
81pub use file::Builder as FileBuilder;
82
83#[cfg(feature = "flate2")]
86mod flate2;
87#[cfg(feature = "flate2")]
88pub use ::flate2::Compression;
89
90#[cfg(feature = "flate2")]
91pub use crate::flate2::{CompressionBuilder, Constructor, CrcBuilder};
92
93mod process;
96pub use process::Builder as ProcessBuilder;
97
98#[cfg(any(feature = "chacha20", feature = "salsa20", feature = "aes_ctr"))]
101mod stream_cipher;
102#[cfg(feature = "aes_ctr")]
103pub use stream_cipher::{
104 Aes128Ctr, Aes128CtrBuilder, Aes128Key, Aes256Ctr, Aes256CtrBuilder, Aes256Key, AesNonce,
105};
106#[cfg(feature = "chacha20")]
107pub use stream_cipher::{ChaCha20Builder, ChaCha20Key, ChaCha20Nonce};
108#[cfg(feature = "salsa20")]
109pub use stream_cipher::{Salsa20Builder, Salsa20Key, Salsa20Nonce};
110
111mod string;
113pub use string::AdhocWriter;
114
115mod tcp_stream;
118pub use tcp_stream::Builder as TcpStreamBuilder;
119
120mod vec;
123pub use vec::Builder as VecBuilder;
124
125#[cfg(feature = "zstd")]
127mod zstd;
128#[cfg(feature = "zstd")]
129pub use crate::zstd::ZstdBuilder;
130
131#[cfg(feature = "bzip2")]
133mod bzip2;
134#[cfg(feature = "bzip2")]
135pub use crate::bzip2::{BzBuilder, Compression as BzCompression};
136
137#[cfg(feature = "lz4_flex")]
139mod lz4_flex;
140#[cfg(feature = "lz4_flex")]
141pub use crate::lz4_flex::Lz4Builder;
142
143#[cfg(feature = "digest")]
145mod digest;
146#[cfg(feature = "digest")]
147pub use crate::digest::{DigestBuilder, DigestReader, DigestWriter};
148#[cfg(feature = "sha2")]
149pub use crate::digest::{Sha256Builder, Sha512Builder};
150#[cfg(feature = "sha3")]
151pub use crate::digest::{Sha3_256Builder, Sha3_512Builder};
152
153#[cfg(feature = "crc32fast")]
155mod crc32fast;
156#[cfg(feature = "crc32fast")]
157pub use crate::crc32fast::{Crc32FastBuilder, Crc32FastReader, Crc32FastWriter};
158
159#[cfg(feature = "rmp_serde")]
161pub mod rmp_serde;
162
163pub trait RwBuilder
166where
167 Self: Sized,
168 Self::Reader: std::io::Read,
169 Self::Writer: std::io::Write,
170{
171 type Reader;
173
174 fn reader(&self) -> Result<Self::Reader>;
179
180 type Writer;
182
183 fn writer(&self) -> Result<Self::Writer>;
188}
189
190pub trait RwBuilderExt: RwBuilder {
192 fn buffered(self) -> BufferedBuilder<Self> {
195 BufferedBuilder::new(self)
196 }
197
198 fn string(self) -> string::Builder<Self> {
201 string::Builder::new(self)
202 }
203
204 #[cfg(feature = "wincode")]
207 fn wincode(self) -> WincodeBuilder<Self> {
208 WincodeBuilder::new(self)
209 }
210
211 #[cfg(feature = "chacha20")]
214 fn chacha20(self, key: ChaCha20Key, nonce: ChaCha20Nonce) -> ChaCha20Builder<Self> {
215 ChaCha20Builder::<Self>::new(self, key, nonce)
216 }
217
218 #[cfg(feature = "salsa20")]
221 fn salsa20(self, key: Salsa20Key, nonce: Salsa20Nonce) -> Salsa20Builder<Self> {
222 Salsa20Builder::<Self>::new(self, key, nonce)
223 }
224
225 #[cfg(feature = "flate2")]
227 fn crc(self) -> CrcBuilder<Self> {
228 CrcBuilder::new(self)
229 }
230
231 #[cfg(feature = "flate2")]
234 fn deflate(self, compression: Compression) -> CompressionBuilder<Self, flate2::Deflate> {
235 flate2::Deflate::new(self, compression)
236 }
237
238 #[cfg(feature = "flate2")]
241 fn gz(self, compression: Compression) -> CompressionBuilder<Self, flate2::Gz> {
242 flate2::Gz::new(self, compression)
243 }
244
245 #[cfg(feature = "flate2")]
248 fn zlib(self, compression: Compression) -> CompressionBuilder<Self, flate2::Zlib> {
249 flate2::Zlib::new(self, compression)
250 }
251
252 #[cfg(feature = "zstd")]
255 fn zstd(self, level: i32) -> ZstdBuilder<Self> {
256 ZstdBuilder::new(self, level)
257 }
258
259 #[cfg(feature = "bzip2")]
262 fn bzip2(self, compression: BzCompression) -> BzBuilder<Self> {
263 BzBuilder::new(self, compression)
264 }
265
266 #[cfg(feature = "lz4_flex")]
269 fn lz4_flex(self) -> Lz4Builder<Self> {
270 Lz4Builder::new(self)
271 }
272
273 #[cfg(feature = "digest")]
275 fn hash<D: ::digest::Digest>(self) -> DigestBuilder<Self, D> {
276 DigestBuilder::new(self)
277 }
278
279 #[cfg(feature = "sha2")]
281 fn sha256(self) -> Sha256Builder<Self> {
282 DigestBuilder::new(self)
283 }
284
285 #[cfg(feature = "sha2")]
287 fn sha512(self) -> Sha512Builder<Self> {
288 DigestBuilder::new(self)
289 }
290
291 #[cfg(feature = "sha3")]
293 fn sha3_256(self) -> Sha3_256Builder<Self> {
294 DigestBuilder::new(self)
295 }
296
297 #[cfg(feature = "sha3")]
299 fn sha3_512(self) -> Sha3_512Builder<Self> {
300 DigestBuilder::new(self)
301 }
302
303 #[cfg(feature = "crc32fast")]
305 fn crc32fast(self) -> Crc32FastBuilder<Self> {
306 Crc32FastBuilder::new(self)
307 }
308
309 #[cfg(feature = "rmp_serde")]
311 fn rmp_serde(self) -> rmp_serde::Builder<Self> {
312 rmp_serde::Builder::new(self)
313 }
314
315 #[cfg(feature = "aes_ctr")]
318 fn aes128_ctr(self, key: Aes128Key, nonce: AesNonce) -> Aes128CtrBuilder<Self> {
319 Aes128CtrBuilder::new(self, key, nonce)
320 }
321
322 #[cfg(feature = "aes_ctr")]
325 fn aes256_ctr(self, key: Aes256Key, nonce: AesNonce) -> Aes256CtrBuilder<Self> {
326 Aes256CtrBuilder::new(self, key, nonce)
327 }
328}
329
330impl<T: RwBuilder> RwBuilderExt for T {}
331
332#[cfg(feature = "wincode")]
335pub trait SerDe {
336 fn load<T>(&self) -> Result<T>
341 where
342 T: for<'de> serde::de::Deserialize<'de>;
343
344 fn save<T>(&self, value: &T) -> Result<()>
349 where
350 T: serde::ser::Serialize;
351}
352
353#[cfg(test)]
354mod tests;