ppforest2 v0.1.0
Projection Pursuit Decision Trees and Random Forests
Loading...
Searching...
No Matches
JsonReader.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <initializer_list>
4#include <limits>
5#include <string>
6
7#include <nlohmann/json.hpp>
8
9namespace ppforest2 {
38 class JsonReader {
39 public:
47 JsonReader(nlohmann::json const& j, std::string path);
48
50 void require_object() const;
51
57 JsonReader at(std::string const& key) const;
58
67 template<typename T> T require(std::string const& key) const;
68
70 template<typename T> T optional(std::string const& key, T fallback) const;
71
73 bool contains(std::string const& key) const;
74
81 std::string require_enum(std::string const& key, std::initializer_list<char const*> allowed) const;
82
105 long long require_int(
106 std::string const& key,
107 long long min = std::numeric_limits<long long>::min(),
108 long long max = std::numeric_limits<long long>::max()
109 ) const;
110
113 std::string const& key,
114 double min = -std::numeric_limits<double>::infinity(),
115 double max = std::numeric_limits<double>::infinity()
116 ) const;
117
124 void only_keys(std::initializer_list<char const*> allowed) const;
125
132 void require_keys(std::initializer_list<char const*> keys) const;
133
140 nlohmann::json const& require_array(std::string const& key) const;
141
149 void require_string_array(std::string const& key, bool non_empty = false) const;
150
158 void forbid_key(std::string const& key, std::string const& reason) const;
159
162 void expect_enum(std::string const& key, std::initializer_list<char const*> allowed) const {
163 (void)require_enum(key, allowed);
164 }
166 std::string const& key,
167 long long min = std::numeric_limits<long long>::min(),
168 long long max = std::numeric_limits<long long>::max()
169 ) const {
170 (void)require_int(key, min, max);
171 }
173 std::string const& key,
174 double min = -std::numeric_limits<double>::infinity(),
175 double max = std::numeric_limits<double>::infinity()
176 ) const {
177 (void)require_number(key, min, max);
178 }
179 void expect_array(std::string const& key) const { (void)require_array(key); }
181
183 nlohmann::json const& json() const { return j_; }
184
186 std::string const& path() const { return path_; }
187
188 private:
189 nlohmann::json const& j_;
190 std::string path_;
191
192 std::string child_path(std::string const& key) const;
193 nlohmann::json const& require_present(std::string const& key) const;
194 };
195}
T optional(std::string const &key, T fallback) const
Extract an optional typed value, falling back to fallback.
nlohmann::json const & json() const
The raw underlying JSON (escape hatch for unusual cases).
Definition JsonReader.hpp:183
void require_keys(std::initializer_list< char const * > keys) const
Assert every key in keys is present on the wrapped object.
void only_keys(std::initializer_list< char const * > allowed) const
Assert the wrapped object contains only the given keys.
double require_number(std::string const &key, double min=-std::numeric_limits< double >::infinity(), double max=std::numeric_limits< double >::infinity()) const
Extract a required number (double), optionally constrained.
void require_string_array(std::string const &key, bool non_empty=false) const
Assert key is an array of strings, optionally non-empty.
JsonReader(nlohmann::json const &j, std::string path)
void expect_array(std::string const &key) const
Definition JsonReader.hpp:179
long long require_int(std::string const &key, long long min=std::numeric_limits< long long >::min(), long long max=std::numeric_limits< long long >::max()) const
Extract a required integer value, optionally constrained.
void expect_int(std::string const &key, long long min=std::numeric_limits< long long >::min(), long long max=std::numeric_limits< long long >::max()) const
Definition JsonReader.hpp:165
void require_object() const
Assert the wrapped value is a JSON object.
void expect_enum(std::string const &key, std::initializer_list< char const * > allowed) const
Definition JsonReader.hpp:162
void expect_number(std::string const &key, double min=-std::numeric_limits< double >::infinity(), double max=std::numeric_limits< double >::infinity()) const
Definition JsonReader.hpp:172
void forbid_key(std::string const &key, std::string const &reason) const
Throw if key is present and non-null on the wrapped object.
nlohmann::json const & require_array(std::string const &key) const
Return a const reference to a required array field.
bool contains(std::string const &key) const
Whether key is present on the wrapped object.
std::string const & path() const
The path prefix used in error messages.
Definition JsonReader.hpp:186
JsonReader at(std::string const &key) const
Descend into a required sub-object.
T require(std::string const &key) const
Extract a required typed value.
std::string require_enum(std::string const &key, std::initializer_list< char const * > allowed) const
Extract a required string constrained to allowed values.
Binarization strategies for multiclass-to-binary reduction.
Definition Benchmark.hpp:25