use thiserror::Error;
#[derive(Debug, Clone, PartialEq, Eq, Error)]
pub enum TopologyError {
#[error("a topology needs at least 2 agents, got {n}")]
TeamTooSmall { n: usize },
#[error("adjacency matrix is not square: {rows} rows, a row of length {row_len}")]
NotSquare { rows: usize, row_len: usize },
#[error("flattened adjacency should hold {expected} entries, got {found}")]
FlatLength { expected: usize, found: usize },
#[error("edge {i}->{j} is not valid in a {n}-agent topology")]
BadEdge { i: usize, j: usize, n: usize },
#[error("expected a {expected}-agent topology, got {found}")]
SizeMismatch { expected: usize, found: usize },
#[error("expected a {expected}-dimensional query embedding, got {found}")]
QueryDimMismatch { expected: usize, found: usize },
#[error("no {kind} records to fit on")]
NoRecords { kind: &'static str },
#[error("record {index} carries a non-finite {field}")]
NonFinite { index: usize, field: &'static str },
#[error("{field} must be {expected}, got {found}")]
BadConfig {
field: &'static str,
expected: &'static str,
found: String,
},
#[error("codebook is empty — nothing to select")]
EmptyCodebook,
#[error("selector was fitted under embedder {fitted}, query came from {query}")]
EmbedderMismatch { fitted: String, query: String },
}