minifi-api/include/minifi-cpp/core/PropertyValidator.h (97 lines of code) (raw):

/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include <string_view> #include "utils/ParsingUtils.h" namespace org::apache::nifi::minifi::core { class PropertyValidator { public: virtual constexpr ~PropertyValidator() {} // NOLINT can't use = default because of gcc bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93413 [[nodiscard]] virtual std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const = 0; [[nodiscard]] virtual bool validate(std::string_view input) const = 0; }; class AlwaysValidValidator final : public PropertyValidator { public: AlwaysValidValidator() = default; constexpr ~AlwaysValidValidator() override {} // NOLINT see comment at parent [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "VALID"; } [[nodiscard]] bool validate(std::string_view) const override { return true; } }; class NonBlankValidator final : public PropertyValidator { public: NonBlankValidator() = default; constexpr ~NonBlankValidator() override {} // NOLINT see comment at parent [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "NON_BLANK_VALIDATOR"; } [[nodiscard]] bool validate(const std::string_view input) const override { return !utils::string::trim(input).empty(); } }; class TimePeriodValidator final : public PropertyValidator { public: TimePeriodValidator() = default; constexpr ~TimePeriodValidator() override {} // NOLINT see comment at parent [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "TIME_PERIOD_VALIDATOR"; } [[nodiscard]] bool validate(const std::string_view input) const override { const auto parsed_time = parsing::parseDuration<std::chrono::nanoseconds>(input); return parsed_time.has_value(); } }; class BooleanValidator final : public PropertyValidator { public: BooleanValidator() = default; constexpr ~BooleanValidator() override {} // NOLINT see comment at parent [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "BOOLEAN_VALIDATOR"; } [[nodiscard]] bool validate(const std::string_view input) const override { const auto parsed_bool = parsing::parseBool(input); return parsed_bool.has_value(); } }; class IntegerValidator final : public PropertyValidator { public: IntegerValidator() = default; constexpr ~IntegerValidator() override {} // NOLINT see comment at parent [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "INTEGER_VALIDATOR"; } [[nodiscard]] bool validate(const std::string_view input) const override { const auto parsed_integer = parsing::parseIntegral<int64_t>(input); return parsed_integer.has_value(); } }; class UnsignedIntegerValidator final : public PropertyValidator { public: UnsignedIntegerValidator() = default; constexpr ~UnsignedIntegerValidator() override {} // NOLINT see comment at parent [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "NON_NEGATIVE_INTEGER_VALIDATOR"; } [[nodiscard]] bool validate(const std::string_view input) const override { const auto parsed_integer = parsing::parseIntegral<uint64_t>(input); return parsed_integer.has_value(); } }; class DataSizeValidator final : public PropertyValidator { public: DataSizeValidator() = default; constexpr ~DataSizeValidator() override {} // NOLINT see comment at parent [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "DATA_SIZE_VALIDATOR"; } [[nodiscard]] bool validate(const std::string_view input) const override { const auto parsed_data_size = parsing::parseDataSize(input); return parsed_data_size.has_value(); } }; class PortValidator final : public core::PropertyValidator { public: PortValidator() = default; constexpr ~PortValidator() override {} // NOLINT see comment at parent [[nodiscard]] std::optional<std::string_view> getEquivalentNifiStandardValidatorName() const override { return "PORT_VALIDATOR"; } [[nodiscard]] bool validate(const std::string_view input) const override { const auto parsed_integer = parsing::parseIntegralMinMax<uint64_t>(input, 0, 65535); return parsed_integer.has_value(); } }; namespace StandardPropertyValidators { inline constexpr auto ALWAYS_VALID_VALIDATOR = AlwaysValidValidator{}; inline constexpr auto NON_BLANK_VALIDATOR = NonBlankValidator{}; inline constexpr auto TIME_PERIOD_VALIDATOR = TimePeriodValidator{}; inline constexpr auto BOOLEAN_VALIDATOR = BooleanValidator{}; inline constexpr auto INTEGER_VALIDATOR = IntegerValidator{}; inline constexpr auto UNSIGNED_INTEGER_VALIDATOR = UnsignedIntegerValidator{}; inline constexpr auto DATA_SIZE_VALIDATOR = DataSizeValidator{}; inline constexpr auto PORT_VALIDATOR = PortValidator{}; } } // namespace org::apache::nifi::minifi::core