#![deny(
future_incompatible,
nonstandard_style,
rust_2018_compatibility,
rust_2018_idioms,
unused,
warnings
)]
#![deny(
absolute_paths_not_starting_with_crate,
deprecated_in_future,
elided_lifetimes_in_paths,
explicit_outlives_requirements,
keyword_idents,
macro_use_extern_crate,
meta_variable_misuse,
missing_abi,
missing_copy_implementations,
missing_debug_implementations,
missing_docs,
non_ascii_idents,
noop_method_call,
rust_2021_incompatible_or_patterns,
pointer_structural_match,
semicolon_in_expressions_from_macros,
single_use_lifetimes,
trivial_casts,
trivial_numeric_casts,
unreachable_pub,
unsafe_code,
unsafe_op_in_unsafe_fn,
unstable_features,
unused_crate_dependencies,
unused_extern_crates,
unused_import_braces,
unused_lifetimes,
unused_qualifications,
unused_results,
variant_size_differences
)]
#![deny(
clippy::all,
clippy::cargo,
clippy::nursery,
clippy::pedantic,
clippy::missing_safety_doc,
clippy::missing_docs_in_private_items
)]
#![deny(
rustdoc::bare_urls,
rustdoc::broken_intra_doc_links,
rustdoc::invalid_codeblock_attributes,
rustdoc::invalid_html_tags,
rustdoc::missing_crate_level_docs,
rustdoc::private_doc_tests,
rustdoc::private_intra_doc_links
)]
use anyhow::Result;
#[cfg(feature = "bincode")]
mod bincode;
#[cfg(feature = "bincode")]
pub use crate::bincode::Builder as BincodeBuilder;
mod buffered;
pub use buffered::Builder as BufferedBuilder;
mod file;
pub use file::Builder as FileBuilder;
#[cfg(feature = "flate2")]
mod flate2;
#[cfg(feature = "flate2")]
pub use ::flate2::Compression;
#[cfg(feature = "flate2")]
pub use crate::flate2::{CompressionBuilder, Constructor, CrcBuilder};
mod process;
pub use process::Builder as ProcessBuilder;
#[cfg(any(feature = "chacha20", feature = "salsa20"))]
mod stream_cipher;
#[cfg(feature = "chacha20")]
pub use stream_cipher::{ChaCha20Builder, ChaCha20Key, ChaCha20Nonce};
#[cfg(feature = "salsa20")]
pub use stream_cipher::{Salsa20Builder, Salsa20Key, Salsa20Nonce};
mod string;
pub use string::AdhocWriter;
mod tcp_stream;
pub use tcp_stream::Builder as TcpStreamBuilder;
mod vec;
pub use vec::Builder as VecBuilder;
pub trait RwBuilder
where
Self: Sized,
Self::Reader: std::io::Read,
Self::Writer: std::io::Write,
{
type Reader;
fn reader(&self) -> Result<Self::Reader>;
type Writer;
fn writer(&self) -> Result<Self::Writer>;
fn buffered(self) -> BufferedBuilder<Self> {
BufferedBuilder::new(self)
}
fn string(self) -> string::Builder<Self> {
string::Builder::new(self)
}
#[cfg(feature = "bincode")]
fn bincode(self) -> BincodeBuilder<Self> {
BincodeBuilder::new(self)
}
#[cfg(feature = "chacha20")]
fn chacha20(self, key: ChaCha20Key, nonce: ChaCha20Nonce) -> ChaCha20Builder<Self> {
ChaCha20Builder::<Self>::new(self, key, nonce)
}
#[cfg(feature = "salsa20")]
fn salsa20(self, key: Salsa20Key, nonce: Salsa20Nonce) -> Salsa20Builder<Self> {
Salsa20Builder::<Self>::new(self, key, nonce)
}
#[cfg(feature = "flate2")]
fn crc(self) -> CrcBuilder<Self> {
CrcBuilder::new(self)
}
#[cfg(feature = "flate2")]
fn deflate(self, compression: Compression) -> CompressionBuilder<Self, flate2::Deflate> {
flate2::Deflate::new(self, compression)
}
#[cfg(feature = "flate2")]
fn gz(self, compression: Compression) -> CompressionBuilder<Self, flate2::Gz> {
flate2::Gz::new(self, compression)
}
#[cfg(feature = "flate2")]
fn zlib(self, compression: Compression) -> CompressionBuilder<Self, flate2::Zlib> {
flate2::Zlib::new(self, compression)
}
}
#[cfg(feature = "bincode")]
pub trait SerDe {
fn load<T>(&self) -> Result<T>
where
T: for<'de> serde::de::Deserialize<'de>;
fn save<T>(&self, value: &T) -> Result<()>
where
T: serde::ser::Serialize;
}
#[cfg(test)]
mod tests;