Skip to content

Commit

Permalink
implemented JSON serialision for StamError
Browse files Browse the repository at this point in the history
  • Loading branch information
proycon committed Nov 12, 2024
1 parent 5c4d183 commit 71ed8d8
Showing 1 changed file with 59 additions and 0 deletions.
59 changes: 59 additions & 0 deletions src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
//! This module implements the [`StamError`] type, which encapsulates all different kind of errors this STAM library can produce.
use crate::types::*;
use serde::ser::SerializeStruct;
use serde::Serialize;
use std::fmt;

// ------------------------------ ERROR DEFINITIONS & IMPLEMENTATIONS -------------------------------------------------------------
Expand Down Expand Up @@ -122,6 +124,63 @@ pub enum StamError {
OtherError(&'static str),
}

impl StamError {
pub fn name(&self) -> &'static str {
match self {
StamError::HandleError(..) => "HandleError",
StamError::IdNotFoundError(..) => "IdNotFoundError",
StamError::NotFoundError(..) => "NotFoundError",
StamError::Unbound(..) => "Unbound",
StamError::AlreadyBound(..) => "AlreadyBound",
StamError::AlreadyExists(..) => "AlreadyExists",
StamError::NoIdError(..) => "NoIdError",
StamError::DuplicateIdError(..) => "DuplicateIdError",
StamError::IOError(..) => "IoError",
StamError::JsonError(..) => "JsonError",

#[cfg(feature = "csv")]
StamError::CsvError(..) => "CsvError",

StamError::RegexError(..) => "RegexError",
StamError::QuerySyntaxError(..) => "QuerySyntaxError",
StamError::SerializationError(..) => "SerializationError",
StamError::DeserializationError(..) => "DeserializationError",
StamError::BuildError(..) => "BuildError",
StamError::StoreError(..) => "StoreError",
StamError::WrongSelectorType(..) => "WrongSelectorType",
StamError::WrongSelectorTarget(..) => "WrongSelectorTarget",
StamError::CursorOutOfBounds(..) => "CursorOutOfBounds",
StamError::InvalidOffset(..) => "InvalidOffset",
StamError::InvalidCursor(..) => "InvalidCursor",
StamError::NoTarget(..) => "NoTarget",
StamError::NoText(..) => "NoText",
StamError::InUse(..) => "InUse",
StamError::IncompleteError(..) => "IncompleteError",
StamError::ValueError(..) => "ValueError",
#[cfg(feature = "transpose")]
StamError::TransposeError(..) => "TransposeError",
StamError::ValidationError(..) => "ValidationError",
StamError::UndefinedVariable(..) => "UndefinedVariable",
StamError::VariableNotFoundError(..) => "VariableNotFoundError",
StamError::OtherError(..) => "OtherError",
}
}
}

impl Serialize for StamError {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let mut state = serializer.serialize_struct("StamError", 3)?;
let message: String = self.into();
state.serialize_field("@type", "StamError")?;
state.serialize_field("name", self.name())?;
state.serialize_field("message", &message)?;
state.end()
}
}

impl From<&StamError> for String {
/// Returns the error message as a String
fn from(error: &StamError) -> String {
Expand Down

0 comments on commit 71ed8d8

Please sign in to comment.