#![doc = include_str!("_docs/readme.md")]
#![cfg_attr(not(any(test, doc, feature = "std")), no_std)]
#![cfg_attr(feature = "unstable", allow(internal_features))]
#![cfg_attr(feature = "unstable", feature(doc_cfg))]
#![cfg_attr(feature = "unstable", feature(doc_auto_cfg))]
#![cfg_attr(feature = "unstable", feature(core_intrinsics))]
#![cfg_attr(feature = "unstable", feature(error_in_core))]
#![cfg_attr(feature = "unstable", feature(coverage_attribute))]
#![cfg_attr(feature = "unstable", feature(trusted_len))]
#![cfg_attr(ffuzzy_ilog2 = "unstable", feature(int_log))]
#![cfg_attr(ffuzzy_div_ceil = "unstable", feature(int_roundings))]
#![cfg_attr(feature = "maint-code", deny(warnings))]
#![cfg_attr(
not(any(
feature = "unsafe",
feature = "unsafe-guarantee",
feature = "unchecked",
test
)),
forbid(unsafe_code)
)]
#![cfg_attr(
all(
not(any(feature = "unsafe", test)),
any(feature = "unchecked", feature = "unsafe-guarantee")
),
deny(unsafe_code)
)]
#![cfg_attr(not(test), warn(missing_docs))]
#![cfg_attr(not(test), warn(clippy::missing_docs_in_private_items))]
#![cfg_attr(not(feature = "maint-lints"), allow(unknown_lints))]
#![cfg_attr(not(feature = "maint-lints"), allow(renamed_and_removed_lints))]
#![cfg_attr(test, allow(unused_unsafe))]
#![cfg_attr(test, allow(clippy::assertions_on_constants))]
#![cfg_attr(test, allow(clippy::int_plus_one))]
#![cfg_attr(test, allow(clippy::identity_op))]
#![cfg_attr(test, allow(clippy::erasing_op))]
#![cfg_attr(test, allow(clippy::overly_complex_bool_expr))]
#![cfg_attr(test, allow(clippy::logic_bug))]
#![cfg_attr(test, allow(clippy::nonminimal_bool))]
#[cfg(any(feature = "alloc", test, doc))]
extern crate alloc;
mod base64;
mod compare;
mod compare_easy;
mod generate;
mod generate_easy;
mod generate_easy_std;
mod hash;
mod hash_dual;
mod intrinsics;
mod macros;
mod test_utils;
mod utils;
#[cfg(doc)]
#[allow(missing_docs)]
pub mod _docs;
pub use compare::FuzzyHashCompareTarget;
#[cfg(feature = "easy-functions")]
pub use compare_easy::{compare, ParseErrorEither, ParseErrorSide};
pub use generate::{Generator, GeneratorError};
#[cfg(feature = "easy-functions")]
pub use generate_easy::hash_buf;
#[cfg(all(feature = "easy-functions", feature = "std"))]
pub use generate_easy_std::{hash_file, hash_stream, GeneratorOrIOError};
pub use hash::block::{block_hash, block_size, BlockSizeRelation};
pub use hash::parser_state::{ParseError, ParseErrorInfo, ParseErrorKind, ParseErrorOrigin};
pub use hash::{
FuzzyHash, FuzzyHashData, FuzzyHashOperationError, LongFuzzyHash, LongRawFuzzyHash,
RawFuzzyHash,
};
pub use hash_dual::{DualFuzzyHash, FuzzyHashDualData, LongDualFuzzyHash};
pub mod internal_hashes {
pub use super::generate::{PartialFNVHash, RollingHash};
}
pub mod internal_comparison {
pub use super::compare::position_array::{
block_hash_position_array_element, BlockHashPositionArray, BlockHashPositionArrayData,
BlockHashPositionArrayImpl,
};
#[cfg(feature = "unchecked")]
pub use super::compare::position_array::BlockHashPositionArrayImplUnchecked;
}
pub mod constraints {
pub use super::hash::block::{
BlockHashSize, BlockHashSizes, ConstrainedBlockHashSize, ConstrainedBlockHashSizes,
};
}
pub const MAX_LEN_IN_STR: usize = LongRawFuzzyHash::MAX_LEN_IN_STR;
#[doc(hidden)]
mod const_asserts {
use super::*;
use static_assertions::const_assert;
const_assert!(usize::BITS >= 16);
const_assert!(MAX_LEN_IN_STR >= FuzzyHash::MAX_LEN_IN_STR);
const_assert!(MAX_LEN_IN_STR >= RawFuzzyHash::MAX_LEN_IN_STR);
const_assert!(MAX_LEN_IN_STR >= LongFuzzyHash::MAX_LEN_IN_STR);
const_assert!(MAX_LEN_IN_STR >= LongRawFuzzyHash::MAX_LEN_IN_STR);
}
mod tests;