#![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,
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
)]
pub mod error;
pub use error::{Error, Result};
#[cfg(feature = "wincode")]
mod wincode;
#[cfg(feature = "wincode")]
pub use crate::wincode::Builder as WincodeBuilder;
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", feature = "aes_ctr"))]
mod stream_cipher;
#[cfg(feature = "aes_ctr")]
pub use stream_cipher::{
Aes128Ctr, Aes128CtrBuilder, Aes128Key, Aes256Ctr, Aes256CtrBuilder, Aes256Key, AesNonce,
};
#[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;
#[cfg(feature = "zstd")]
mod zstd;
#[cfg(feature = "zstd")]
pub use crate::zstd::ZstdBuilder;
#[cfg(feature = "bzip2")]
mod bzip2;
#[cfg(feature = "bzip2")]
pub use crate::bzip2::{BzBuilder, Compression as BzCompression};
#[cfg(feature = "lz4_flex")]
mod lz4_flex;
#[cfg(feature = "lz4_flex")]
pub use crate::lz4_flex::Lz4Builder;
#[cfg(feature = "digest")]
mod digest;
#[cfg(feature = "digest")]
pub use crate::digest::{DigestBuilder, DigestReader, DigestWriter};
#[cfg(feature = "sha2")]
pub use crate::digest::{Sha256Builder, Sha512Builder};
#[cfg(feature = "sha3")]
pub use crate::digest::{Sha3_256Builder, Sha3_512Builder};
#[cfg(feature = "crc32fast")]
mod crc32fast;
#[cfg(feature = "crc32fast")]
pub use crate::crc32fast::{Crc32FastBuilder, Crc32FastReader, Crc32FastWriter};
#[cfg(feature = "rmp_serde")]
pub mod rmp_serde;
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>;
}
pub trait RwBuilderExt: RwBuilder {
fn buffered(self) -> BufferedBuilder<Self> {
BufferedBuilder::new(self)
}
fn string(self) -> string::Builder<Self> {
string::Builder::new(self)
}
#[cfg(feature = "wincode")]
fn wincode(self) -> WincodeBuilder<Self> {
WincodeBuilder::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 = "zstd")]
fn zstd(self, level: i32) -> ZstdBuilder<Self> {
ZstdBuilder::new(self, level)
}
#[cfg(feature = "bzip2")]
fn bzip2(self, compression: BzCompression) -> BzBuilder<Self> {
BzBuilder::new(self, compression)
}
#[cfg(feature = "lz4_flex")]
fn lz4_flex(self) -> Lz4Builder<Self> {
Lz4Builder::new(self)
}
#[cfg(feature = "digest")]
fn hash<D: ::digest::Digest>(self) -> DigestBuilder<Self, D> {
DigestBuilder::new(self)
}
#[cfg(feature = "sha2")]
fn sha256(self) -> Sha256Builder<Self> {
DigestBuilder::new(self)
}
#[cfg(feature = "sha2")]
fn sha512(self) -> Sha512Builder<Self> {
DigestBuilder::new(self)
}
#[cfg(feature = "sha3")]
fn sha3_256(self) -> Sha3_256Builder<Self> {
DigestBuilder::new(self)
}
#[cfg(feature = "sha3")]
fn sha3_512(self) -> Sha3_512Builder<Self> {
DigestBuilder::new(self)
}
#[cfg(feature = "crc32fast")]
fn crc32fast(self) -> Crc32FastBuilder<Self> {
Crc32FastBuilder::new(self)
}
#[cfg(feature = "rmp_serde")]
fn rmp_serde(self) -> rmp_serde::Builder<Self> {
rmp_serde::Builder::new(self)
}
#[cfg(feature = "aes_ctr")]
fn aes128_ctr(self, key: Aes128Key, nonce: AesNonce) -> Aes128CtrBuilder<Self> {
Aes128CtrBuilder::new(self, key, nonce)
}
#[cfg(feature = "aes_ctr")]
fn aes256_ctr(self, key: Aes256Key, nonce: AesNonce) -> Aes256CtrBuilder<Self> {
Aes256CtrBuilder::new(self, key, nonce)
}
}
impl<T: RwBuilder> RwBuilderExt for T {}
#[cfg(feature = "wincode")]
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;