#[derive(thiserror::Error, Debug)]
pub enum Error {
    #[error("Failed to convert value: {0}")]
    Conversion(&'static str),
    #[error("Failed to find symbol {0}")]
    SymbolNotFound(String),
    #[error("Failed to find type {0}")]
    TypeNotFound(String),
    #[error("Failed to find field {field_name} in type {type_name}")]
    FieldNotFound {
        type_name: String,
        field_name: String,
    },
}
impl Error {
    pub fn symbol_not_found(symbol_name: impl Into<String>) -> Self {
        Self::SymbolNotFound(symbol_name.into())
    }
    pub fn type_not_found(type_name: impl Into<String>) -> Self {
        Self::TypeNotFound(type_name.into())
    }
    pub fn field_not_found(type_name: impl Into<String>, field_name: impl Into<String>) -> Self {
        Self::FieldNotFound {
            type_name: type_name.into(),
            field_name: field_name.into(),
        }
    }
}