#pragma once #include #include #include #include #include namespace jvalidate::adapter { inline std::ostream & operator<<(std::ostream & os, Type type) { switch (type) { case Type::Null: return os << "null"; case Type::Boolean: return os << "boolean"; case Type::Integer: return os << "integer"; case Type::Number: return os << "number"; case Type::String: return os << "string"; case Type::Array: return os << "array"; case Type::Object: return os << "object"; } } } namespace jvalidate::schema { inline std::ostream & operator<<(std::ostream & os, Version version) { switch (version) { case Version::Draft03: return os << "draft3"; case Version::Draft04: return os << "draft4"; case Version::Draft06: return os << "draft6"; case Version::Draft07: return os << "draft7"; case Version::Draft2019_09: return os << "draft2019-09"; case Version::Draft2020_12: return os << "draft2020-12"; } } } namespace jvalidate { inline std::ostream & operator<<(std::ostream & os, Status st) { if (st == Status::Accept) { return os << "Accept"; } if (st == Status::Reject) { return os << "Reject"; } return os << "Noop"; } template inline std::ostream & operator<<(std::ostream & os, std::set const & data) { if (data.size() == 1) { return os << *data.begin(); } os << '['; std::string div = " "; for (auto const & elem : data) { os << std::exchange(div, ", ") << elem; } return os << ' ' << ']'; } template inline std::ostream & operator<<(std::ostream & os, std::unordered_set const & data) { if (data.size() == 1) { return os << *data.begin(); } os << '['; std::string div = " "; for (auto const & elem : data) { os << std::exchange(div, ", ") << elem; } return os << ' ' << ']'; } }