This is an automated email from the ASF dual-hosted git repository.

martinzink pushed a commit to branch minifi_rust_impr_2
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git

commit bacefcc462240f70bd7c19ea62e67e2af55126bd
Author: Martin Zink <[email protected]>
AuthorDate: Mon Aug 17 11:31:07 2026 +0200

    add anyhow error support and fold parse errors into validation errors
---
 minifi_rust/minifi_native/Cargo.toml        |  1 +
 minifi_rust/minifi_native/src/api/errors.rs | 85 +++++++++--------------------
 2 files changed, 27 insertions(+), 59 deletions(-)

diff --git a/minifi_rust/minifi_native/Cargo.toml 
b/minifi_rust/minifi_native/Cargo.toml
index b3f75648b..8d0a74da2 100644
--- a/minifi_rust/minifi_native/Cargo.toml
+++ b/minifi_rust/minifi_native/Cargo.toml
@@ -13,6 +13,7 @@ strum_macros = "0.28.0"
 humantime = "2.3.0"
 byte-unit = "5.1.6"
 itertools = "0.14.0"
+anyhow = "1.0.104"
 
 [features]
 test-utils = []
diff --git a/minifi_rust/minifi_native/src/api/errors.rs 
b/minifi_rust/minifi_native/src/api/errors.rs
index 7802e397a..9e5749fcc 100644
--- a/minifi_rust/minifi_native/src/api/errors.rs
+++ b/minifi_rust/minifi_native/src/api/errors.rs
@@ -24,18 +24,6 @@ use std::fmt;
 use std::num::{NonZeroU32, ParseFloatError, ParseIntError};
 use std::str::ParseBoolError;
 
-#[derive(Debug, Clone)]
-pub enum ParseError {
-    Strum(strum::ParseError),
-    Bool(ParseBoolError),
-    Int(ParseIntError),
-    Duration(humantime::DurationError),
-    Size(byte_unit::ParseError),
-    Nul(NulError),
-    Float(ParseFloatError),
-    Other,
-}
-
 #[derive(Debug)]
 pub struct RouteError {
     pub relationship: Cow<'static, str>,
@@ -168,7 +156,6 @@ pub enum MinifiError {
     UnscheduledProcessor,
     ValidationError(Cow<'static, str>),
     CustomError(Cow<'static, str>),
-    Parse(ParseError),
     MissingFlowFileError,
     IoError(std::io::Error),
 
@@ -181,47 +168,27 @@ impl From<std::io::Error> for MinifiError {
     }
 }
 
-impl From<strum::ParseError> for MinifiError {
-    fn from(err: strum::ParseError) -> Self {
-        MinifiError::Parse(ParseError::Strum(err))
-    }
-}
-
-impl From<ParseBoolError> for MinifiError {
-    fn from(err: ParseBoolError) -> Self {
-        MinifiError::Parse(ParseError::Bool(err))
-    }
-}
-
-impl From<ParseIntError> for MinifiError {
-    fn from(err: ParseIntError) -> Self {
-        MinifiError::Parse(ParseError::Int(err))
-    }
-}
-
-impl From<humantime::DurationError> for MinifiError {
-    fn from(err: humantime::DurationError) -> Self {
-        MinifiError::Parse(ParseError::Duration(err))
-    }
-}
-
-impl From<byte_unit::ParseError> for MinifiError {
-    fn from(err: byte_unit::ParseError) -> Self {
-        MinifiError::Parse(ParseError::Size(err))
-    }
-}
-
-impl From<NulError> for MinifiError {
-    fn from(err: NulError) -> Self {
-        MinifiError::Parse(ParseError::Nul(err))
-    }
+macro_rules! minifi_error_from_validation {
+    ($($t:ty),* $(,)?) => {
+        $(
+            impl From<$t> for MinifiError {
+                fn from(err: $t) -> Self {
+                    MinifiError::ValidationError(err.to_string().into())
+                }
+            }
+        )*
+    };
 }
 
-impl From<ParseFloatError> for MinifiError {
-    fn from(err: ParseFloatError) -> Self {
-        MinifiError::Parse(ParseError::Float(err))
-    }
-}
+minifi_error_from_validation!(
+    strum::ParseError,
+    ParseBoolError,
+    ParseIntError,
+    humantime::DurationError,
+    byte_unit::ParseError,
+    NulError,
+    ParseFloatError,
+);
 
 impl From<std::convert::Infallible> for MinifiError {
     fn from(_: std::convert::Infallible) -> Self {
@@ -229,6 +196,12 @@ impl From<std::convert::Infallible> for MinifiError {
     }
 }
 
+impl From<anyhow::Error> for MinifiError {
+    fn from(err: anyhow::Error) -> Self {
+        Self::other(err)
+    }
+}
+
 impl MinifiError {
     pub(crate) fn to_status(&self) -> minifi_status {
         match self {
@@ -241,9 +214,6 @@ impl MinifiError {
             MinifiError::ValidationError(_) => {
                 
minifi_native_sys::minifi_status_MINIFI_STATUS_VALIDATION_FAILED
             }
-            MinifiError::Parse(_) => {
-                
minifi_native_sys::minifi_status_MINIFI_STATUS_VALIDATION_FAILED
-            }
             MinifiError::StatusError((_, ecode)) => u32::from(*ecode),
             _ => minifi_native_sys::minifi_status_MINIFI_STATUS_UNKNOWN_ERROR,
         }
@@ -257,10 +227,6 @@ impl MinifiError {
         MinifiError::CustomError(msg.into())
     }
 
-    pub fn parse_err() -> Self {
-        MinifiError::Parse(ParseError::Other)
-    }
-
     pub fn other<E>(err: E) -> Self
     where
         E: Into<Box<dyn Error + Send + Sync + 'static>>,
@@ -294,6 +260,7 @@ impl fmt::Display for MinifiError {
                 _ => write!(f, "{} (Unknown Status Code: {})", context, code),
             },
             MinifiError::Other(err) => write!(f, "Custom error: {}", err),
+            MinifiError::ValidationError(msg) => write!(f, "{}", msg),
             _ => write!(f, "{:?}", self),
         }
     }

Reply via email to