#![warn(future_incompatible)]
#![warn(nonstandard_style)]
#![warn(rust_2018_compatibility)]
#![warn(rust_2018_idioms)]
#![warn(rust_2021_compatibility)]
#![warn(rust_2024_compatibility)]
#![warn(unused)]
#![warn(bare_trait_objects)]
#![warn(dead_code)]
#![warn(missing_copy_implementations)]
#![warn(missing_debug_implementations)]
#![warn(missing_docs)]
#![warn(single_use_lifetimes)]
#![warn(trivial_casts)]
#![warn(trivial_numeric_casts)]
#![warn(unreachable_pub)]
#![warn(unstable_features)]
#![warn(unused_import_braces)]
#![warn(unused_lifetimes)]
#![warn(unused_qualifications)]
#![warn(unused_results)]
#![warn(unsafe_code)]
#![warn(variant_size_differences)]
#![warn(clippy::all)]
#![warn(clippy::pedantic)]
#![warn(clippy::nursery)]
#![warn(clippy::clone_on_ref_ptr)]
#![warn(clippy::decimal_literal_representation)]
#![warn(clippy::else_if_without_else)]
#![warn(clippy::float_arithmetic)]
#![warn(clippy::float_cmp_const)]
#![warn(clippy::indexing_slicing)]
#![warn(clippy::mem_forget)]
#![warn(clippy::missing_docs_in_private_items)]
#![warn(clippy::multiple_inherent_impl)]
#![warn(clippy::print_stdout)]
#![warn(clippy::unwrap_used)]
#![warn(clippy::shadow_reuse)]
#![warn(clippy::shadow_same)]
#![warn(clippy::unimplemented)]
#![warn(clippy::use_debug)]
#![allow(clippy::module_name_repetitions)]
#![allow(clippy::must_use_candidate)]
#![allow(clippy::redundant_pub_crate)]
#![allow(clippy::too_long_first_doc_paragraph)]
#![allow(clippy::wildcard_imports)]
#[cfg(profile = "debug")]
#[macro_use]
mod assert {
#![allow(unused_macros)]
#![allow(unused_macro_rules)]
macro_rules! proven {
($($arg:tt)*) => {
assert!($($arg)*)
};
}
macro_rules! always {
($cond:expr) => { {
assert!($cond); true
} };
($cond:expr, $($arg:tt)*) => {
assert!($cond, $($arg)*)
};
}
macro_rules! never {
($cond:expr) => { {
assert!(!$cond); false
} };
($cond:expr, $($arg:tt)*) => {
assert!(!$cond, $($arg)*)
};
}
macro_rules! tested {
($cond:expr) => ()
}
}
#[cfg(profile = "coverage")]
#[macro_use]
mod assert {
#![allow(unused_macros)]
macro_rules! proven {
($($arg:tt)*) => ();
}
macro_rules! always {
($cond:expr) => {
true
};
($cond:expr, $($arg:tt)*) => {
assert!($cond, $($arg)*)
};
}
macro_rules! never {
($cond:expr) => {
false
};
($cond:expr, $($arg:tt)*) => {
assert!(!$cond, $($arg)*)
};
}
macro_rules! tested {
($cond:expr) => {
if $cond {
let _ = crate::ffi::sodium::memcmp(&[], &[]);
}
};
}
}
#[cfg(profile = "release")]
#[macro_use]
mod assert {
#![allow(unused_macros)]
macro_rules! proven {
($($arg:tt)*) => ();
}
macro_rules! always {
($cond:expr) => {
$cond
};
($cond:expr, $($arg:tt)*) => {
assert!($cond, $($arg)*)
};
}
macro_rules! never {
($cond:expr) => {
$cond
};
($cond:expr, $($arg:tt)*) => {
assert!(!$cond, $($arg)*)
};
}
macro_rules! tested {
($cond:expr) => ();
}
}
mod ffi {
pub(crate) mod sodium;
}
mod boxed;
mod secret;
mod secret_box;
mod secret_vec;
pub mod traits;
pub use secret::Secret;
pub use secret_box::SecretBox;
pub use secret_vec::SecretVec;