use thiserror::Error;
use crate::circuit::{Identifier, Net};
#[derive(Error, Debug)]
pub enum Error {
#[error("Cycles detected along nets {0:?}")]
CycleDetected(Vec<Net>),
#[error("Parsing error `{0}`")]
ParseError(String),
#[error("Non-unique nets: {0:?}")]
NonuniqueNets(Vec<Net>),
#[error("Non-unique instances: {0:?}")]
NonuniqueInsts(Vec<Identifier>),
#[error("No outputs in netlist")]
NoOutputs,
#[error("Error in the instantiable interface: {0}")]
InstantiableError(String),
#[error("Attempted to create a dangling reference to nets {0:?}")]
DanglingReference(Vec<Net>),
#[error("Expected {0} arguments, got {1}")]
ArgumentMismatch(usize, usize),
#[error("Input net {0} needs an alias to be an output")]
InputNeedsAlias(Net),
#[error("Expected to find net {0} in netlist")]
NetNotFound(Net),
}