#![doc = include_str!("../README.md")]
use std::{collections::TryReserveError, io};
pub use builder::Builder;
pub use coverage::{Coverage, CoverageRouter};
#[cfg(feature = "external-sort")]
pub use external::{ExternalBuildStats, ExternalBuilder, ExternalOptions};
pub use reader::{Match, Reader};
pub use target::Target;
mod builder;
mod coverage;
#[cfg(feature = "external-sort")]
mod external;
mod layout;
#[cfg(feature = "mmdb")]
pub mod mmdb;
mod packed;
mod reader;
mod search;
mod target;
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum Error {
#[error("resource limit exceeded: {0}")]
Limit(&'static str),
#[error("invalid {0}")]
Invalid(&'static str),
#[error("unsupported index version {0}")]
Version(u32),
#[error("failed to reserve index memory")]
Allocation(#[from] TryReserveError),
#[error("failed to reserve payload index memory")]
HashAllocation(#[from] hashbrown::TryReserveError),
#[error("failed to write index")]
Io(#[from] io::Error),
#[cfg(feature = "external-sort")]
#[error("failed to {operation} temporary index data")]
TemporaryIo {
operation: &'static str,
#[source]
error: io::Error,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Limits {
pub records: usize,
pub bytes: usize,
}
impl Default for Limits {
fn default() -> Self {
Self {
records: 1_000_000,
bytes: 128 * 1024 * 1024,
}
}
}