|
2 | 2 | //! |
3 | 3 | //! Zelen provides FlatZinc parsing and integration with the Selen constraint solver. |
4 | 4 | //! |
5 | | -//! ## Example |
| 5 | +//! ## Quick Start |
6 | 6 | //! |
7 | | -//! ```rust,ignore |
| 7 | +//! ```rust |
8 | 8 | //! use zelen::prelude::*; |
9 | 9 | //! |
10 | | -//! let mut model = Model::default(); |
11 | | -//! model.from_flatzinc_file("problem.fzn")?; |
12 | | -//! let solution = model.solve()?; |
| 10 | +//! // Define a simple FlatZinc problem |
| 11 | +//! let fzn = r#" |
| 12 | +//! var 1..10: x; |
| 13 | +//! var 1..10: y; |
| 14 | +//! constraint int_eq(x, 5); |
| 15 | +//! constraint int_plus(x, y, 12); |
| 16 | +//! solve satisfy; |
| 17 | +//! "#; |
| 18 | +//! |
| 19 | +//! // Create solver and solve |
| 20 | +//! let mut solver = FlatZincSolver::new(); |
| 21 | +//! solver.load_str(fzn).unwrap(); |
| 22 | +//! |
| 23 | +//! if solver.solve().is_ok() { |
| 24 | +//! // Get FlatZinc-formatted output |
| 25 | +//! let output = solver.to_flatzinc(); |
| 26 | +//! assert!(output.contains("x = 5")); |
| 27 | +//! assert!(output.contains("y = 7")); |
| 28 | +//! } |
13 | 29 | //! ``` |
| 30 | +//! |
| 31 | +//! ## Main API |
| 32 | +//! |
| 33 | +//! The primary way to use Zelen is through the [`FlatZincSolver`] which provides |
| 34 | +//! automatic FlatZinc parsing and spec-compliant output formatting. |
| 35 | +//! |
| 36 | +//! For more control, you can use the lower-level [`FlatZincModel`] trait or work |
| 37 | +//! with individual modules directly. |
| 38 | +//! |
| 39 | +//! See the [`prelude`] module for commonly used types and traits. |
14 | 40 |
|
| 41 | +// Internal implementation modules - hidden from docs by default |
| 42 | +#[doc(hidden)] |
15 | 43 | pub mod ast; |
16 | 44 | pub mod error; |
| 45 | +#[doc(hidden)] |
17 | 46 | pub mod tokenizer; |
| 47 | +#[doc(hidden)] |
18 | 48 | pub mod parser; |
| 49 | +#[doc(hidden)] |
19 | 50 | pub mod mapper; |
| 51 | + |
| 52 | +// Public API modules |
20 | 53 | pub mod output; |
21 | 54 | pub mod solver; |
22 | 55 | pub mod integration; |
23 | 56 |
|
24 | 57 | pub use error::{FlatZincError, FlatZincResult}; |
| 58 | +pub use solver::{FlatZincSolver, FlatZincContext, SolverOptions}; |
| 59 | +pub use integration::FlatZincModel; |
25 | 60 |
|
26 | | -// Re-export selen for convenience |
| 61 | +// Re-export selen for convenience, but hide its docs since users should refer to selen's own docs |
| 62 | +#[doc(no_inline)] |
27 | 63 | pub use selen; |
28 | 64 |
|
29 | | -/// Prelude module for common imports |
| 65 | +/// Prelude module for convenient imports. |
| 66 | +/// |
| 67 | +/// This module re-exports the most commonly used types and traits. |
| 68 | +/// |
| 69 | +/// # Example |
| 70 | +/// |
| 71 | +/// ```rust |
| 72 | +/// use zelen::prelude::*; |
| 73 | +/// |
| 74 | +/// let mut solver = FlatZincSolver::new(); |
| 75 | +/// // ... use solver |
| 76 | +/// ``` |
30 | 77 | pub mod prelude { |
| 78 | + //! Commonly used types and traits for working with FlatZinc. |
| 79 | + |
31 | 80 | pub use crate::error::{FlatZincError, FlatZincResult}; |
32 | | - pub use crate::integration::*; |
| 81 | + pub use crate::integration::FlatZincModel; |
33 | 82 | pub use crate::output::{OutputFormatter, SearchType, SolveStatistics}; |
34 | 83 | pub use crate::solver::{FlatZincContext, FlatZincSolver, SolverOptions}; |
| 84 | + |
| 85 | + // Re-export Selen's prelude, but don't inline the docs |
| 86 | + #[doc(no_inline)] |
35 | 87 | pub use selen::prelude::*; |
36 | 88 | } |
37 | 89 |
|
|
0 commit comments