1#![warn(missing_docs)]
2
3use generator::model::{ModelIndex, ModelRotation, ModelVariantIndex};
7use ghx_grid::grid::GridIndex;
8
9pub use ghx_grid;
10
11pub mod generator;
13
14pub type NodeIndex = GridIndex;
16
17#[derive(thiserror::Error, Debug, Clone, Copy)]
19#[error("Failed to generate, contradiction at node with index {}", node_index)]
20pub struct GeneratorError {
21 pub node_index: NodeIndex,
23}
24
25#[derive(thiserror::Error, Debug, Clone, Copy)]
27pub enum RulesBuilderError {
28 #[error("Empty models or sockets collection")]
30 NoModelsOrSockets,
31}
32
33#[derive(thiserror::Error, Debug, Clone)]
35pub enum NodeSetError {
36 #[error("Invalid model variant index `{0}`, does not exist in the rules")]
38 InvalidModelIndex(ModelVariantIndex),
39 #[error("Invalid model variant reference: model index `{0}` with rotation `{1:?}`, does not exist in the rules")]
41 InvalidModelRef(ModelIndex, ModelRotation),
42 #[error("Invalid node index `{0}`, does not exist in the grid")]
44 InvalidNodeIndex(NodeIndex),
45 #[error("Model variant `{0}` not allowed by the Rules on node {1}")]
47 IllegalModel(ModelVariantIndex, NodeIndex),
48 #[error("Generation error: {0}")]
50 GenerationError(#[from] GeneratorError),
51}
52
53#[derive(thiserror::Error, Debug, Clone)]
55pub enum GeneratorBuilderError {
56 #[error("Initial node set error: {0}")]
58 InitialNodeSetError(#[from] NodeSetError),
59 #[error("Given grid size {0:?} does not match the expected size {1:?}")]
61 InvalidGridSize(usize, usize),
62}