#![warn(missing_docs)]
use generator::model::{ModelIndex, ModelRotation, ModelVariantIndex};
use grid::GridIndex;
pub mod grid;
pub mod prelude;
pub mod generator;
pub type NodeIndex = GridIndex;
#[derive(thiserror::Error, Debug, Clone, Copy)]
#[error("Failed to generate, contradiction at node with index {}", node_index)]
pub struct GeneratorError {
pub node_index: NodeIndex,
}
#[derive(thiserror::Error, Debug, Clone, Copy)]
pub enum RulesBuilderError {
#[error("Empty models or sockets collection")]
NoModelsOrSockets,
}
#[derive(thiserror::Error, Debug, Clone)]
pub enum NodeSetError {
#[error("Invalid model variant index `{0}`, does not exist in the rules")]
InvalidModelIndex(ModelVariantIndex),
#[error("Invalid model variant reference: model index `{0}` with rotation `{1:?}`, does not exist in the rules")]
InvalidModelRef(ModelIndex, ModelRotation),
#[error("Invalid node index `{0}`, does not exist in the grid")]
InvalidNodeIndex(NodeIndex),
#[error("Model variant `{0}` not allowed by the Rules on node {1}")]
IllegalModel(ModelVariantIndex, NodeIndex),
#[error("Generation error: {0}")]
GenerationError(#[from] GeneratorError),
}
#[derive(thiserror::Error, Debug, Clone)]
pub enum GeneratorBuilderError {
#[error("Initial node set error: {0}")]
InitialNodeSetError(#[from] NodeSetError),
#[error("Given grid size {0:?} does not match the expected size {1:?}")]
InvalidGridSize(usize, usize),
}