From 7f93f2d0b77133bde799662628664e04008ccbf2 Mon Sep 17 00:00:00 2001 From: Maxime Augier Date: Mon, 19 Aug 2024 20:27:47 +0200 Subject: [PATCH] Report back failing string on parse error --- src/observation.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/observation.rs b/src/observation.rs index 4d66667..811b1a9 100644 --- a/src/observation.rs +++ b/src/observation.rs @@ -73,19 +73,22 @@ pub enum ObservationData { #[derive(Error, Debug)] pub enum ParseError { - #[error("integer: {0}")] - Integer(#[from] ParseIntError), + #[error("integer `{0}`: {1}")] + Integer(String, ParseIntError), - #[error("double: {0}")] - Double(#[from] ParseFloatError), + #[error("double `{0}: {1}")] + Double(String, ParseFloatError), } impl ObservationData { fn from_dynamic(value: String, data_type: DataType) -> Result { Ok(match data_type { - DataType::Boolean => ObservationData::Boolean(value.parse::()? != 0), - DataType::Double => ObservationData::Double(value.parse()?), - DataType::Integer => ObservationData::Integer(value.parse()?), + DataType::Boolean => ObservationData::Boolean(value.parse::() + .map_err(move |e| ParseError::Integer(value, e))? != 0), + DataType::Double => ObservationData::Double(value.parse() + .map_err(move|e| ParseError::Double(value, e))?), + DataType::Integer => ObservationData::Integer(value.parse() + .map_err(move |e| ParseError::Integer(value, e))?), DataType::String => ObservationData::String(value), }) }