From ba64b92093bc6c900dbfc76ad6a95377df09d31a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Gonz=C3=A1lez?= <7822554+AlexTMjugador@users.noreply.github.com> Date: Tue, 14 Jan 2025 13:34:11 +0100 Subject: [PATCH] feat(parsing): give serviceable parsing error details to users (#135) --- src/error.rs | 2 +- src/parsing.rs | 4 ++-- src/schedule.rs | 4 +++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/error.rs b/src/error.rs index e34fc36..a1591e2 100644 --- a/src/error.rs +++ b/src/error.rs @@ -16,7 +16,7 @@ pub enum ErrorKind { impl fmt::Display for Error { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self.kind { - ErrorKind::Expression(ref expr) => write!(f, "Invalid expression: {}", expr), + ErrorKind::Expression(ref expr) => write!(f, "{expr}"), } } } diff --git a/src/parsing.rs b/src/parsing.rs index a0ec9ea..e0ee0ab 100644 --- a/src/parsing.rs +++ b/src/parsing.rs @@ -18,8 +18,8 @@ impl TryFrom> for Schedule { fn try_from(expression: Cow<'_, str>) -> Result { match schedule.parse(&expression) { - Ok(schedule_fields) => Ok(Schedule::new(expression.into_owned(), schedule_fields)), // Extract from nom tuple - Err(_) => Err(ErrorKind::Expression("Invalid cron expression.".to_owned()).into()), //TODO: Details + Ok(schedule_fields) => Ok(Schedule::new(expression.into_owned(), schedule_fields)), // Extract from winnow tuple + Err(parse_error) => Err(ErrorKind::Expression(format!("{parse_error}")).into()), } } } diff --git a/src/schedule.rs b/src/schedule.rs index 89300cd..c18f580 100644 --- a/src/schedule.rs +++ b/src/schedule.rs @@ -689,7 +689,9 @@ mod test { &[Token::String( "definitively an invalid value for a cron schedule!", )], - "Invalid expression: Invalid cron expression.", + "definitively an invalid value for a cron schedule!\n\ + ^\n\ + The 'Seconds' field does not support using names. 'definitively' specified.", ); }