Skip to content

MINIFICPP-2869 Improve rust api property validation and property getters#2220

Draft
martinzink wants to merge 3 commits into
minifi_rustfrom
minifi_rust_impr
Draft

MINIFICPP-2869 Improve rust api property validation and property getters#2220
martinzink wants to merge 3 commits into
minifi_rustfrom
minifi_rust_impr

Conversation

@martinzink

Copy link
Copy Markdown
Member

Thank you for submitting a contribution to Apache NiFi - MiNiFi C++.

In order to streamline the review of the contribution we ask you to ensure the following steps have been taken:

For all changes:

  • Is there a JIRA ticket associated with this PR? Is it referenced in the commit message?

  • Does your PR title start with MINIFICPP-XXXX where XXXX is the JIRA number you are trying to resolve? Pay particular attention to the hyphen "-" character.

  • Has your PR been rebased against the latest commit within the target branch (typically main)?

  • Is your initial contribution a single, squashed commit?

For code changes:

  • If adding new dependencies to the code, are these dependencies licensed in a way that is compatible for inclusion under ASF 2.0?
  • If applicable, have you updated the LICENSE file?
  • If applicable, have you updated the NOTICE file?

For documentation related changes:

  • Have you ensured that format looks appropriate for the output in which it is rendered?

Note:

Please ensure that once the PR is submitted, you check GitHub Actions CI results for build issues and submit an update to your PR as soon as possible.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR refactors the Rust-side MiNiFi property API to support typed property getters with centralized constraint validation, and updates the example playground processors/controller services to use the new API. It also extends error handling and adds some small quality-of-life improvements (Relationship Display, test helper utilities).

Changes:

  • Introduce PropertyConstraints + PropertyType and replace ad-hoc typed getters with generic get_property<T>() / get_req_property<T>().
  • Update C-FFI property registration and playground processors/controller services to the new constraints/getter model.
  • Add new error variants/conversions and minor utilities/macros for transforms and logging/property types.

Reviewed changes

Copilot reviewed 33 out of 33 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
minifi_rust/minifi_rs_behave/src/main.rs Installs an additional Python dependency (certifi) for behave runner setup.
minifi_rust/minifi_native/src/mock/mock_controller_service_context.rs Updates mock context to implement the renamed raw property getter (get_raw_property).
minifi_rust/minifi_native/src/lib.rs Re-exports new property API types and adds extern crate self as minifi_native to support macro paths.
minifi_rust/minifi_native/src/c_ffi/c_ffi_property.rs Adapts C-FFI property definition generation to PropertyConstraints.
minifi_rust/minifi_native/src/c_ffi/c_ffi_controller_service_context.rs Renames trait method impl to get_raw_property.
minifi_rust/minifi_native/src/api/relationship.rs Adds Display impl for Relationship.
minifi_rust/minifi_native/src/api/property.rs Introduces PropertyConstraints, PropertyType, and typed getters (get_property<T>, get_req_property<T>).
minifi_rust/minifi_native/src/api/processor_wrappers/utils/context_session_flowfile_bundle.rs Updates GetProperty impl to get_raw_property.
minifi_rust/minifi_native/src/api/processor_wrappers/flow_file_transform.rs Adds test-utils byte extraction and introduces unwrap_or_route! helper macro.
minifi_rust/minifi_native/src/api/process_context.rs Removes legacy typed getters from ProcessContext and updates GetProperty impl to get_raw_property.
minifi_rust/minifi_native/src/api/logger.rs Adds derived PropertyType for LogLevel and updates strum derives.
minifi_rust/minifi_native/src/api/errors.rs Adds attribute-missing error + float/infallible conversions and implements std::error::Error.
minifi_rust/minifi_native/src/api/attribute.rs Adds get_required_attribute helper built on the new attribute-missing error.
minifi_rust/minifi_native/src/api.rs Re-exports new property API surface (DataSize, PropertyConstraints, PropertyType).
minifi_rust/minifi_native/Cargo.toml Adds test-utils feature for conditional helpers.
minifi_rust/minifi_native_macros/src/lib.rs Adds #[derive(PropertyType)] proc-macro to auto-wire allowed-values parsing/constraints.
minifi_rust/extensions/minifi_rs_playground/src/processors/zoo_processor.rs Migrates controller-service property constraints to AllowedType.
minifi_rust/extensions/minifi_rs_playground/src/processors/put_file/unix_only_properties.rs Migrates unix-only properties to NoConstraints.
minifi_rust/extensions/minifi_rs_playground/src/processors/put_file/properties.rs Migrates PutFile properties to Validator/AllowedValues constraints.
minifi_rust/extensions/minifi_rs_playground/src/processors/put_file.rs Switches PutFile implementation to typed get_property<T> / get_req_property<T>.
minifi_rust/extensions/minifi_rs_playground/src/processors/lorem_ipsum_cs_user/properties.rs Migrates properties to AllowedType/AllowedValues.
minifi_rust/extensions/minifi_rs_playground/src/processors/lorem_ipsum_cs_user.rs Switches to typed get_req_property<T> for enum property.
minifi_rust/extensions/minifi_rs_playground/src/processors/log_attribute/properties.rs Migrates LogAttribute properties to new constraints and improves enum default handling.
minifi_rust/extensions/minifi_rs_playground/src/processors/log_attribute.rs Switches LogAttribute scheduling/parsing to typed property getters.
minifi_rust/extensions/minifi_rs_playground/src/processors/kamikaze_processor/properties.rs Migrates Kamikaze properties to AllowedValues/NoConstraints.
minifi_rust/extensions/minifi_rs_playground/src/processors/kamikaze_processor.rs Switches Kamikaze processor to typed getters for enum/string properties.
minifi_rust/extensions/minifi_rs_playground/src/processors/get_file/properties.rs Migrates GetFile properties to Validator constraints and adjusts required flags for typed required getters.
minifi_rust/extensions/minifi_rs_playground/src/processors/get_file.rs Switches GetFile scheduling to typed getters including DataSize/Duration.
minifi_rust/extensions/minifi_rs_playground/src/processors/generate_flow_file/properties.rs Migrates GenerateFlowFile properties to Validator/AllowedValues/NoConstraints.
minifi_rust/extensions/minifi_rs_playground/src/processors/generate_flow_file.rs Switches GenerateFlowFile scheduling to typed getters including DataSize.
minifi_rust/extensions/minifi_rs_playground/src/controller_services/lorem_ipsum_controller_service.rs Migrates property constraints and switches to typed required getter.
minifi_rust/extensions/minifi_rs_playground/src/controller_services/dog_controller_service.rs Migrates property constraints and switches to typed getters for bool/string.
minifi_rust/extensions/minifi_rs_playground/Cargo.toml Minor formatting-only change (blank line).
Comments suppressed due to low confidence (5)

minifi_rust/minifi_native/src/c_ffi/c_ffi_property.rs:96

  • This match p.constraints moves constraints out of &Property (not Copy), which will not compile. Match on a reference instead.
            .iter()
            .map(|p| match p.constraints {
                PropertyConstraints::AllowedType(allowed_type) => allowed_type.as_minifi_c_type(),

minifi_rust/minifi_native/src/api/processor_wrappers/flow_file_transform.rs:236

  • This exported macro should not hardcode the crate name (minifi_native::...) because it breaks if the dependency is renamed. Use $crate::error! so the path is stable.
                minifi_native::error!(
                    $custom_logger,
                    "Failed to unwrap due to {}. Routing flow file.",
                    e
                );

minifi_rust/minifi_native/src/api/processor_wrappers/flow_file_transform.rs:237

  • TransformedFlowFile is referenced unqualified inside this exported macro, forcing callers to import it. Use $crate::TransformedFlowFile to make the macro usable without additional imports.
                return Ok(TransformedFlowFile::route_without_changes($route));

minifi_rust/minifi_native/src/api/processor_wrappers/flow_file_transform.rs:246

  • This exported macro uses error! unqualified, which resolves at the call site and may fail if the caller hasn't imported error!. Use $crate::error! for hygienic macro expansion.
                error!(

minifi_rust/minifi_native/src/api/processor_wrappers/flow_file_transform.rs:250

  • TransformedFlowFile is referenced unqualified inside this exported macro, forcing callers to import it. Use $crate::TransformedFlowFile to make the macro usable without additional imports.
                return Ok(TransformedFlowFile::route_without_changes($route));

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread minifi_rust/minifi_native/src/api/property.rs
Comment thread minifi_rust/minifi_native/src/c_ffi/c_ffi_property.rs
Comment thread minifi_rust/minifi_native/src/api/errors.rs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants