pub mod expansion;
pub mod mutation;
pub mod normalization;
pub mod performance;
pub mod query;
pub mod wildcard;
pub use expansion::{ExpansionMethod, QueryExpansion};
pub use performance::{DatabaseQueryMetrics, PerformanceMetrics, VariantGenerationMetrics};
pub use query::{
FuzzyQuery, FuzzyQueryEngine, FuzzyQueryResult, FuzzyQueryResultData, KmerMatch, MatchType,
QueryMetadata, QueryStatus,
};
use thiserror::Error;
#[derive(Error, Debug)]
pub enum FuzzyError {
#[error("Invalid query string: {0}")]
InvalidQuery(String),
#[error("Too many variants generated: {actual} (limit: {limit})")]
TooManyVariants { actual: usize, limit: usize },
#[error("Memory limit exceeded: {usage_mb}MB (limit: {limit_mb}MB)")]
MemoryLimitExceeded { usage_mb: f64, limit_mb: f64 },
#[error("Database error: {0}")]
DatabaseError(String),
#[error("Performance constraint violation: {0}")]
PerformanceConstraint(String),
#[error("Invalid parameters: {0}")]
InvalidParameters(String),
#[error("Query cancelled by user")]
Cancelled,
#[error("IO error: {0}")]
IoError(#[from] std::io::Error),
}
pub type FuzzyResult<T> = Result<T, FuzzyError>;
pub mod constants {
pub const DEFAULT_MAX_VARIANTS: usize = 10_000;
pub const DEFAULT_BATCH_SIZE: usize = 1_000;
pub const MAX_MUTATION_RATIO: f64 = 0.5;
pub const DEFAULT_MEMORY_LIMIT_MB: f64 = 1024.0;
pub const DEFAULT_TIMEOUT_SECONDS: u64 = 300;
pub const PARALLEL_THRESHOLD: usize = 100;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_fuzzy_error_display() {
let err = FuzzyError::InvalidQuery("Invalid character".to_string());
assert!(err.to_string().contains("Invalid query string"));
}
#[test]
fn test_constants() {
assert!(constants::DEFAULT_MAX_VARIANTS > 0);
assert!(constants::DEFAULT_BATCH_SIZE > 0);
assert!(constants::MAX_MUTATION_RATIO > 0.0);
assert!(constants::MAX_MUTATION_RATIO <= 1.0);
}
}