use crate::document::DocumentError;
use molframe_core::Findings;
use molframe_validate::{ReferenceError, RotamerError};
#[derive(Debug, thiserror::Error)]
pub enum ValidationInputError {
#[error("validation input I/O failed: {0}")]
Io(#[from] std::io::Error),
#[error("invalid JSON validation input: {0}")]
Json(#[from] serde_json::Error),
#[error("invalid TOML validation input: {0}")]
Toml(#[from] toml::de::Error),
#[error("validation inputs must use a .json or .toml suffix")]
UnsupportedFormat,
#[error("invalid value for {field}: {reason}")]
InvalidValue {
field: String,
reason: String,
},
#[error("invalid reference library: {0}")]
Reference(#[from] ReferenceError),
#[error("invalid rotamer profile: {0}")]
Rotamer(#[from] RotamerError),
#[error("selection for {id} failed: {findings}")]
Selection {
id: String,
findings: Findings,
},
}
impl From<DocumentError> for ValidationInputError {
fn from(error: DocumentError) -> Self {
match error {
DocumentError::Io(error) => Self::Io(error),
DocumentError::Json(error) => Self::Json(error),
DocumentError::Toml(error) => Self::Toml(error),
DocumentError::UnsupportedFormat => Self::UnsupportedFormat,
}
}
}
impl ValidationInputError {
pub(super) fn invalid(field: impl Into<String>, reason: impl Into<String>) -> Self {
Self::InvalidValue {
field: field.into(),
reason: reason.into(),
}
}
}