use serde::{Deserialize, Serialize};
use std::fmt;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ErrorMessage {
pub code: i32,
pub message: String,
}
impl ErrorMessage {
pub fn new(code: i32, message: &str) -> Self {
Self {
code,
message: message.to_string(),
}
}
pub fn to_json(&self) -> String {
serde_json::to_string(self).unwrap_or_else(|_| "{}".to_string())
}
}
#[derive(Debug, Clone)]
pub enum JsonHashError {
HashAlgorithmInvalid,
NotAFile,
FileDoesNotExist,
FileOpeningError,
HashDigestComputationError,
}
impl JsonHashError {
pub fn code(&self) -> i32 {
match self {
JsonHashError::HashAlgorithmInvalid => 3,
JsonHashError::NotAFile => 5,
JsonHashError::FileDoesNotExist => 6,
JsonHashError::FileOpeningError => 66,
JsonHashError::HashDigestComputationError => 70,
}
}
pub fn message(&self) -> &'static str {
match self {
JsonHashError::HashAlgorithmInvalid => "HASH-ALGORITHM-INVALID",
JsonHashError::NotAFile => "NOT-A-FILE",
JsonHashError::FileDoesNotExist => "FILE-DOES-NOT-EXIST",
JsonHashError::FileOpeningError => "FILE-OPENING-ERROR",
JsonHashError::HashDigestComputationError => "HASH-DIGEST-COMPUTATION-ERROR",
}
}
}
impl fmt::Display for JsonHashError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.message())
}
}
impl From<JsonHashError> for ErrorMessage {
fn from(error: JsonHashError) -> Self {
ErrorMessage::new(error.code(), error.message())
}
}