From 0c7cace799bde609c87d1aeb9b093bc12d14f180 Mon Sep 17 00:00:00 2001 From: Adam Leventhal Date: Thu, 14 Jul 2022 21:25:48 -0700 Subject: [PATCH] add context to error messages (#127) --- progenitor-impl/src/lib.rs | 49 +++++++++++++++++++++++++++++---- progenitor-impl/src/template.rs | 2 +- 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/progenitor-impl/src/lib.rs b/progenitor-impl/src/lib.rs index fbe5c3a..0fcedd8 100644 --- a/progenitor-impl/src/lib.rs +++ b/progenitor-impl/src/lib.rs @@ -16,15 +16,15 @@ mod util; #[derive(Error, Debug)] pub enum Error { - #[error("unexpected value type")] + #[error("unexpected value type {0}: {1}")] BadValue(String, serde_json::Value), - #[error("type error")] + #[error("type error {0}")] TypeError(#[from] typify::Error), - #[error("unexpected or unhandled format in the OpenAPI document")] + #[error("unexpected or unhandled format in the OpenAPI document {0}")] UnexpectedFormat(String), - #[error("invalid operation path")] + #[error("invalid operation path {0}")] InvalidPath(String), - #[error("internal error")] + #[error("internal error {0}")] InternalError(String), } @@ -427,3 +427,42 @@ impl Generator { &self.type_space } } + +#[cfg(test)] +mod tests { + use serde_json::json; + + use crate::Error; + + #[test] + fn test_bad_value() { + assert_eq!( + Error::BadValue("nope".to_string(), json! { "nope"},).to_string(), + "unexpected value type nope: \"nope\"", + ); + } + + #[test] + fn test_type_error() { + assert_eq!( + Error::UnexpectedFormat("nope".to_string()).to_string(), + "unexpected or unhandled format in the OpenAPI document nope", + ); + } + + #[test] + fn test_invalid_path() { + assert_eq!( + Error::InvalidPath("nope".to_string()).to_string(), + "invalid operation path nope", + ); + } + + #[test] + fn test_internal_error() { + assert_eq!( + Error::InternalError("nope".to_string()).to_string(), + "internal error nope", + ); + } +} diff --git a/progenitor-impl/src/template.rs b/progenitor-impl/src/template.rs index 36d8a9c..2d81a9a 100644 --- a/progenitor-impl/src/template.rs +++ b/progenitor-impl/src/template.rs @@ -156,7 +156,7 @@ impl ToString for PathTemplate { } #[cfg(test)] -mod test { +mod tests { use std::collections::HashMap; use super::{parse, Component, PathTemplate};