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
62use anyhow::Result;
63
64#[cfg(feature = "wincode")]
67mod wincode;
68#[cfg(feature = "wincode")]
69pub use crate::wincode::Builder as WincodeBuilder;
70
71mod buffered;
74pub use buffered::Builder as BufferedBuilder;
75
76mod file;
79pub use file::Builder as FileBuilder;
80
81#[cfg(feature = "flate2")]
84mod flate2;
85#[cfg(feature = "flate2")]
86pub use ::flate2::Compression;
87
88#[cfg(feature = "flate2")]
89pub use crate::flate2::{CompressionBuilder, Constructor, CrcBuilder};
90
91mod process;
94pub use process::Builder as ProcessBuilder;
95
96#[cfg(any(feature = "chacha20", feature = "salsa20"))]
99mod stream_cipher;
100#[cfg(feature = "chacha20")]
101pub use stream_cipher::{ChaCha20Builder, ChaCha20Key, ChaCha20Nonce};
102#[cfg(feature = "salsa20")]
103pub use stream_cipher::{Salsa20Builder, Salsa20Key, Salsa20Nonce};
104
105mod string;
107pub use string::AdhocWriter;
108
109mod tcp_stream;
112pub use tcp_stream::Builder as TcpStreamBuilder;
113
114mod vec;
117pub use vec::Builder as VecBuilder;
118
119pub trait RwBuilder
122where
123 Self: Sized,
124 Self::Reader: std::io::Read,
125 Self::Writer: std::io::Write,
126{
127 type Reader;
129
130 fn reader(&self) -> Result<Self::Reader>;
135
136 type Writer;
138
139 fn writer(&self) -> Result<Self::Writer>;
144
145 fn buffered(self) -> BufferedBuilder<Self> {
148 BufferedBuilder::new(self)
149 }
150
151 fn string(self) -> string::Builder<Self> {
154 string::Builder::new(self)
155 }
156
157 #[cfg(feature = "wincode")]
160 fn wincode(self) -> WincodeBuilder<Self> {
161 WincodeBuilder::new(self)
162 }
163
164 #[cfg(feature = "chacha20")]
167 fn chacha20(self, key: ChaCha20Key, nonce: ChaCha20Nonce) -> ChaCha20Builder<Self> {
168 ChaCha20Builder::<Self>::new(self, key, nonce)
169 }
170
171 #[cfg(feature = "salsa20")]
174 fn salsa20(self, key: Salsa20Key, nonce: Salsa20Nonce) -> Salsa20Builder<Self> {
175 Salsa20Builder::<Self>::new(self, key, nonce)
176 }
177
178 #[cfg(feature = "flate2")]
180 fn crc(self) -> CrcBuilder<Self> {
181 CrcBuilder::new(self)
182 }
183
184 #[cfg(feature = "flate2")]
187 fn deflate(self, compression: Compression) -> CompressionBuilder<Self, flate2::Deflate> {
188 flate2::Deflate::new(self, compression)
189 }
190
191 #[cfg(feature = "flate2")]
194 fn gz(self, compression: Compression) -> CompressionBuilder<Self, flate2::Gz> {
195 flate2::Gz::new(self, compression)
196 }
197
198 #[cfg(feature = "flate2")]
201 fn zlib(self, compression: Compression) -> CompressionBuilder<Self, flate2::Zlib> {
202 flate2::Zlib::new(self, compression)
203 }
204}
205
206#[cfg(feature = "wincode")]
209pub trait SerDe {
210 fn load<T>(&self) -> Result<T>
215 where
216 T: for<'de> serde::de::Deserialize<'de>;
217
218 fn save<T>(&self, value: &T) -> Result<()>
223 where
224 T: serde::ser::Serialize;
225}
226
227#[cfg(test)]
228mod tests;