use failure::Fail;
pub type Result<T> = ::std::result::Result<T, Error>;
#[derive(Fail, Debug)]
pub enum Error {
#[fail(
display = "Value node is not initialized (Index = {})",
index
)]
ValueUninitialized { index: usize },
#[fail(
display = "Derivative is not initialized (Index = {})",
index
)]
DerivUninitialized { index: usize },
#[fail(display = "Node type mismatch (Index = {})", index)]
NodeTypeError { index: usize },
#[fail(display = "Duplicated name (name = {})", name)]
DuplicatedName { name: String },
#[fail(display = "Variable name is not defined (name = {})", name)]
UndefinedName { name: String },
#[fail(display = "JSON serialization failed: {:?})", error)]
JSONSerializeFailed { error: serde_json::error::Error },
}