Expand description
Umiaq is a pattern-matching solver for crossword puzzles and similar word games.
§Core Functionality
The main entry point is solver::solve_equation
, which takes a pattern string and
a word list, returning matching solutions.
§Error Handling
Umiaq uses structured error types with error codes and helpful messages:
solver::SolverError
(Top-level errors (S001-S003))errors::ParseError
(Parsing errors (E001-E016))
§Example: Basic Usage
use umiaq::solver;
let words = vec!["cat", "dog", "catalog"];
let result = solver::solve_equation("A*B", &words, 10)?;
for solution in result.solutions {
println!("{}", solver::solution_to_string(&solution)?);
}
§Example: Error Handling with Detailed Messages
use umiaq::solver::{self, SolverError};
let words = vec!["test"];
let result = solver::solve_equation("", &words, 10);
match result {
Ok(r) => println!("Found {} solutions", r.solutions.len()),
Err(e) => {
// Display with error code and help text
eprintln!("Error: {}", e.display_detailed());
// Error code for documentation lookup
eprintln!("Code: {}", e.code());
}
}
§Example: Handling Specific Error Types
use umiaq::solver::{self, SolverError};
use umiaq::errors::ParseError;
let words = vec!["test"];
match solver::solve_equation("BAD(PATTERN", &words, 10) {
Err(SolverError::ParseFailure(parse_err)) => {
// Access the specific ParseError
match &*parse_err {
ParseError::InvalidInput { str } => {
println!("Invalid input: {}", str);
}
ParseError::ClauseParseError { clause, source } => {
println!("Error in clause '{}': {}", clause, source);
}
_ => println!("Other parse error: {}", parse_err),
}
}
Err(e) => println!("Solver error: {}", e),
Ok(_) => println!("Success"),
}
Modules§
- bindings
- complex_
constraints - constraints
- errors
- Error types for parsing operations with error codes and helpful messages.
- parser
- patterns
- solver
- The main solver for pattern-matching equations against word lists.
- umiaq_
char - word_
list word_list
— Module to load and preprocess the crossword word list for Umiaq