| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- #pragma once
- #include <regex>
- #include <unordered_map>
- #include <jvalidate/forward.h>
- #include <jvalidate/status.h>
- #include <jvalidate/validation_visitor.h>
- namespace jvalidate::detail {
- class StdRegexEngine {
- public:
- std::regex regex_;
- public:
- StdRegexEngine(std::string const & regex) : regex_(regex) {}
- bool search(std::string const & text) const { return std::regex_search(text, regex_); }
- };
- }
- namespace jvalidate {
- template <template <Adapter, RegexEngine> class ValidationVisitor,
- RegexEngine RE = detail::StdRegexEngine>
- class ExtendedValidator {
- private:
- schema::Node const & schema_;
- std::unordered_map<std::string, RE> regex_cache_;
- public:
- ExtendedValidator(schema::Node const & schema) : schema_(schema) {}
- template <Adapter A> Status validate(A const & json, Result const * result = nullptr) const {
- return ValidationVisitor<A, RE>(json, schema_, regex_cache_, result).validate();
- }
- };
- class Validator : public ExtendedValidator<ValidationVisitor> {
- public:
- using Validator::ExtendedValidator::ExtendedValidator;
- };
- }
|