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 pointer_structural_match,
29 semicolon_in_expressions_from_macros,
30 single_use_lifetimes,
31 trivial_casts,
32 trivial_numeric_casts,
33 unreachable_pub,
34 unsafe_code,
35 unsafe_op_in_unsafe_fn,
36 unstable_features,
37 unused_crate_dependencies,
38 unused_extern_crates,
39 unused_import_braces,
40 unused_lifetimes,
41 unused_qualifications,
42 unused_results,
43 variant_size_differences
44)]
45#![deny(
46 clippy::all,
47 clippy::cargo,
48 clippy::nursery,
49 clippy::pedantic,
50 clippy::missing_safety_doc,
51 clippy::missing_docs_in_private_items
52)]
53#![deny(
54 rustdoc::bare_urls,
55 rustdoc::broken_intra_doc_links,
56 rustdoc::invalid_codeblock_attributes,
57 rustdoc::invalid_html_tags,
58 rustdoc::missing_crate_level_docs,
59 rustdoc::private_doc_tests,
60 rustdoc::private_intra_doc_links
61)]
62
63use anyhow::Result;
64
65#[cfg(feature = "bincode")]
68mod bincode;
69#[cfg(feature = "bincode")]
70pub use crate::bincode::Builder as BincodeBuilder;
71
72mod buffered;
75pub use buffered::Builder as BufferedBuilder;
76
77mod file;
80pub use file::Builder as FileBuilder;
81
82#[cfg(feature = "flate2")]
85mod flate2;
86#[cfg(feature = "flate2")]
87pub use ::flate2::Compression;
88
89#[cfg(feature = "flate2")]
90pub use crate::flate2::{CompressionBuilder, Constructor, CrcBuilder};
91
92mod process;
95pub use process::Builder as ProcessBuilder;
96
97#[cfg(any(feature = "chacha20", feature = "salsa20"))]
100mod stream_cipher;
101#[cfg(feature = "chacha20")]
102pub use stream_cipher::{ChaCha20Builder, ChaCha20Key, ChaCha20Nonce};
103#[cfg(feature = "salsa20")]
104pub use stream_cipher::{Salsa20Builder, Salsa20Key, Salsa20Nonce};
105
106mod string;
108pub use string::AdhocWriter;
109
110mod tcp_stream;
113pub use tcp_stream::Builder as TcpStreamBuilder;
114
115mod vec;
118pub use vec::Builder as VecBuilder;
119
120pub trait RwBuilder
123where
124 Self: Sized,
125 Self::Reader: std::io::Read,
126 Self::Writer: std::io::Write,
127{
128 type Reader;
130
131 fn reader(&self) -> Result<Self::Reader>;
136
137 type Writer;
139
140 fn writer(&self) -> Result<Self::Writer>;
145
146 fn buffered(self) -> BufferedBuilder<Self> {
149 BufferedBuilder::new(self)
150 }
151
152 fn string(self) -> string::Builder<Self> {
155 string::Builder::new(self)
156 }
157
158 #[cfg(feature = "bincode")]
161 fn bincode(self) -> BincodeBuilder<Self> {
162 BincodeBuilder::new(self)
163 }
164
165 #[cfg(feature = "chacha20")]
168 fn chacha20(self, key: ChaCha20Key, nonce: ChaCha20Nonce) -> ChaCha20Builder<Self> {
169 ChaCha20Builder::<Self>::new(self, key, nonce)
170 }
171
172 #[cfg(feature = "salsa20")]
175 fn salsa20(self, key: Salsa20Key, nonce: Salsa20Nonce) -> Salsa20Builder<Self> {
176 Salsa20Builder::<Self>::new(self, key, nonce)
177 }
178
179 #[cfg(feature = "flate2")]
181 fn crc(self) -> CrcBuilder<Self> {
182 CrcBuilder::new(self)
183 }
184
185 #[cfg(feature = "flate2")]
188 fn deflate(self, compression: Compression) -> CompressionBuilder<Self, flate2::Deflate> {
189 flate2::Deflate::new(self, compression)
190 }
191
192 #[cfg(feature = "flate2")]
195 fn gz(self, compression: Compression) -> CompressionBuilder<Self, flate2::Gz> {
196 flate2::Gz::new(self, compression)
197 }
198
199 #[cfg(feature = "flate2")]
202 fn zlib(self, compression: Compression) -> CompressionBuilder<Self, flate2::Zlib> {
203 flate2::Zlib::new(self, compression)
204 }
205}
206
207#[cfg(feature = "bincode")]
210pub trait SerDe {
211 fn load<T>(&self) -> Result<T>
216 where
217 T: for<'de> serde::de::Deserialize<'de>;
218
219 fn save<T>(&self, value: &T) -> Result<()>
224 where
225 T: serde::ser::Serialize;
226}
227
228#[cfg(test)]
229mod tests;