use thiserror::Error;
pub use crate::runtime::sqlite::SqliteError;
#[derive(Clone, Debug, Error)]
#[error("command rejected: {0}")]
pub struct CommandExecuteError(pub String);
#[derive(Clone, Debug, Error)]
#[error("{code}: {message}")]
pub struct CommandError {
pub code: ErrorCode,
pub message: String,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq, Error)]
pub enum ErrorCode {
#[error("rejected")]
Rejected,
#[error("invalid_input")]
InvalidInput,
#[error("internal")]
Internal,
}
impl CommandError {
pub fn reject(message: impl Into<String>) -> Self {
Self {
code: ErrorCode::Rejected,
message: message.into(),
}
}
pub fn invalid_input(message: impl Into<String>) -> Self {
Self {
code: ErrorCode::InvalidInput,
message: message.into(),
}
}
pub fn internal(message: impl Into<String>) -> Self {
Self {
code: ErrorCode::Internal,
message: message.into(),
}
}
}
#[derive(Clone, Debug, Error)]
#[error("(de)serialization error: {message}")]
pub struct SerializationError {
pub message: String,
}
impl SerializationError {
pub fn new(message: impl Into<String>) -> Self {
Self {
message: message.into(),
}
}
}
impl From<serde_json::Error> for SerializationError {
fn from(err: serde_json::Error) -> Self {
Self::new(err.to_string())
}
}