From 74f848d0159f642b39c67134ec74f46e8fbb4c68 Mon Sep 17 00:00:00 2001 From: Aaron Po Date: Sun, 19 Jul 2026 04:10:32 -0400 Subject: [PATCH] Formatted includes/services/postal_code --- .../postal_code/mock_postal_code_service.h | 93 ++++++++++--------- .../postal_code/postal_code_service.h | 28 +++--- .../postal_code/xeger_postal_code_service.h | 10 +- 3 files changed, 66 insertions(+), 65 deletions(-) diff --git a/tooling/pipeline/includes/services/postal_code/mock_postal_code_service.h b/tooling/pipeline/includes/services/postal_code/mock_postal_code_service.h index 87b05c4e..5c23e334 100644 --- a/tooling/pipeline/includes/services/postal_code/mock_postal_code_service.h +++ b/tooling/pipeline/includes/services/postal_code/mock_postal_code_service.h @@ -24,56 +24,57 @@ * example that fails validation, throws so the caller can skip the city. */ class MockPostalCodeService final : public IPostalCodeService { - public: - std::string GeneratePostalCode(const City& city) override { - const PostalCodeSpec& spec = city.postal_code; + public: + std::string GeneratePostalCode(const City& city) override { + const PostalCodeSpec& spec = city.postal_code; - if (spec.examples.empty()) { - throw std::runtime_error(std::format( - "No postal-code examples available for city '{}'", city.city)); - } - - const std::string& candidate = spec.examples.front(); - - if (!MatchesAnyPattern(candidate, spec)) { - throw std::runtime_error( - std::format("Postal code '{}' for city '{}' does not match the " - "curated postal-code regex", - candidate, city.city)); - } - - return candidate; - } - - private: - /** - * @brief Returns true if @p candidate matches any city regex, or the - * country format regex when no city regex matches. When the spec carries no - * usable regex at all, validation is skipped (returns true). - */ - static bool MatchesAnyPattern(const std::string& candidate, - const PostalCodeSpec& spec) { - bool has_pattern = false; - - for (const std::string& pattern : spec.city_regexes) { - if (pattern.empty()) { - continue; + if (spec.examples.empty()) { + throw std::runtime_error(std::format( + "No postal-code examples available for city '{}'", city.city)); } - has_pattern = true; - if (std::regex_match(candidate, std::regex(pattern))) { - return true; - } - } - if (!spec.country_format_regex.empty()) { - has_pattern = true; - if (std::regex_match(candidate, std::regex(spec.country_format_regex))) { - return true; - } - } + const std::string& candidate = spec.examples.front(); - return !has_pattern; - } + if (!MatchesAnyPattern(candidate, spec)) { + throw std::runtime_error( + std::format("Postal code '{}' for city '{}' does not match the " + "curated postal-code regex", + candidate, city.city)); + } + + return candidate; + } + + private: + /** + * @brief Returns true if @p candidate matches any city regex, or the + * country format regex when no city regex matches. When the spec carries no + * usable regex at all, validation is skipped (returns true). + */ + static bool MatchesAnyPattern(const std::string& candidate, + const PostalCodeSpec& spec) { + bool has_pattern = false; + + for (const std::string& pattern : spec.city_regexes) { + if (pattern.empty()) { + continue; + } + has_pattern = true; + if (std::regex_match(candidate, std::regex(pattern))) { + return true; + } + } + + if (!spec.country_format_regex.empty()) { + has_pattern = true; + if (std::regex_match(candidate, + std::regex(spec.country_format_regex))) { + return true; + } + } + + return !has_pattern; + } }; #endif // BIERGARTEN_PIPELINE_INCLUDES_SERVICES_POSTAL_CODE_MOCK_POSTAL_CODE_SERVICE_H_ diff --git a/tooling/pipeline/includes/services/postal_code/postal_code_service.h b/tooling/pipeline/includes/services/postal_code/postal_code_service.h index 016cf369..c040c4a7 100644 --- a/tooling/pipeline/includes/services/postal_code/postal_code_service.h +++ b/tooling/pipeline/includes/services/postal_code/postal_code_service.h @@ -14,22 +14,22 @@ * @brief Interface for services that resolve a postal code for a city. */ class IPostalCodeService { - public: - IPostalCodeService() = default; - virtual ~IPostalCodeService() = default; + public: + IPostalCodeService() = default; + virtual ~IPostalCodeService() = default; - IPostalCodeService(const IPostalCodeService&) = delete; - IPostalCodeService& operator=(const IPostalCodeService&) = delete; - IPostalCodeService(IPostalCodeService&&) = delete; - IPostalCodeService& operator=(IPostalCodeService&&) = delete; + IPostalCodeService(const IPostalCodeService&) = delete; + IPostalCodeService& operator=(const IPostalCodeService&) = delete; + IPostalCodeService(IPostalCodeService&&) = delete; + IPostalCodeService& operator=(IPostalCodeService&&) = delete; - /** - * @brief Resolves a postal code for @p city. - * - * @param city City whose curated postal-code examples supply the result. - * @return A postal code string, or an empty string if none is available. - */ - virtual std::string GeneratePostalCode(const City& city) = 0; + /** + * @brief Resolves a postal code for @p city. + * + * @param city City whose curated postal-code examples supply the result. + * @return A postal code string, or an empty string if none is available. + */ + virtual std::string GeneratePostalCode(const City& city) = 0; }; #endif // BIERGARTEN_PIPELINE_INCLUDES_SERVICES_POSTAL_CODE_POSTAL_CODE_SERVICE_H_ diff --git a/tooling/pipeline/includes/services/postal_code/xeger_postal_code_service.h b/tooling/pipeline/includes/services/postal_code/xeger_postal_code_service.h index 6b38ec29..04f17d62 100644 --- a/tooling/pipeline/includes/services/postal_code/xeger_postal_code_service.h +++ b/tooling/pipeline/includes/services/postal_code/xeger_postal_code_service.h @@ -20,13 +20,13 @@ * via GenerateStringFromRegex(). */ class XegerPostalCodeService final : public IPostalCodeService { - public: - XegerPostalCodeService(); + public: + XegerPostalCodeService(); - std::string GeneratePostalCode(const City& city) override; + std::string GeneratePostalCode(const City& city) override; - private: - std::mt19937 rng_; + private: + std::mt19937 rng_; }; #endif // BIERGARTEN_PIPELINE_INCLUDES_SERVICES_POSTAL_CODE_XEGER_POSTAL_CODE_SERVICE_H_