mirror of
https://github.com/geode-sdk/geode.git
synced 2024-11-14 19:15:05 -05:00
improve jsonvalidation type errors
This commit is contained in:
parent
908ac44a0b
commit
35d16eb44e
2 changed files with 24 additions and 14 deletions
|
@ -305,6 +305,8 @@ namespace geode {
|
||||||
JsonExpectedValue();
|
JsonExpectedValue();
|
||||||
JsonExpectedValue(Impl* from, matjson::Value& scope, std::string_view key);
|
JsonExpectedValue(Impl* from, matjson::Value& scope, std::string_view key);
|
||||||
|
|
||||||
|
static const char* matJsonTypeToString(matjson::Type ty);
|
||||||
|
|
||||||
bool hasError() const;
|
bool hasError() const;
|
||||||
void setError(std::string_view error);
|
void setError(std::string_view error);
|
||||||
|
|
||||||
|
@ -323,11 +325,19 @@ namespace geode {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
try {
|
try {
|
||||||
return this->getJSONRef().template as<T>();
|
if (this->getJSONRef().template is<T>()) {
|
||||||
|
return this->getJSONRef().template as<T>();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this->setError(
|
||||||
|
"unexpected type {}",
|
||||||
|
this->matJsonTypeToString(this->getJSONRef().type())
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// matjson can throw variant exceptions too so you need to do this
|
// matjson can throw variant exceptions too so you need to do this
|
||||||
catch(std::exception const& e) {
|
catch(std::exception const& e) {
|
||||||
this->setError("invalid json type: {}", e);
|
this->setError("unable to parse json: {}", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
|
|
|
@ -161,18 +161,6 @@ JsonMaybeValue JsonChecker::root(std::string const& hierarchy) {
|
||||||
return JsonMaybeValue(*this, m_json, hierarchy, true);
|
return JsonMaybeValue(*this, m_json, hierarchy, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char* matJsonTypeToString(matjson::Type ty) {
|
|
||||||
switch (ty) {
|
|
||||||
case matjson::Type::Null: return "null";
|
|
||||||
case matjson::Type::Bool: return "bool";
|
|
||||||
case matjson::Type::Number: return "number";
|
|
||||||
case matjson::Type::String: return "string";
|
|
||||||
case matjson::Type::Array: return "array";
|
|
||||||
case matjson::Type::Object: return "object";
|
|
||||||
default: return "unknown";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is used for null JsonExpectedValues (for example when doing
|
// This is used for null JsonExpectedValues (for example when doing
|
||||||
// `json.has("key")` where "key" doesn't exist)
|
// `json.has("key")` where "key" doesn't exist)
|
||||||
static matjson::Value NULL_SCOPED_VALUE = nullptr;
|
static matjson::Value NULL_SCOPED_VALUE = nullptr;
|
||||||
|
@ -231,6 +219,18 @@ JsonExpectedValue::~JsonExpectedValue() {}
|
||||||
JsonExpectedValue::JsonExpectedValue(JsonExpectedValue&&) = default;
|
JsonExpectedValue::JsonExpectedValue(JsonExpectedValue&&) = default;
|
||||||
JsonExpectedValue& JsonExpectedValue::operator=(JsonExpectedValue&&) = default;
|
JsonExpectedValue& JsonExpectedValue::operator=(JsonExpectedValue&&) = default;
|
||||||
|
|
||||||
|
const char* JsonExpectedValue::matJsonTypeToString(matjson::Type ty) {
|
||||||
|
switch (ty) {
|
||||||
|
case matjson::Type::Null: return "null";
|
||||||
|
case matjson::Type::Bool: return "bool";
|
||||||
|
case matjson::Type::Number: return "number";
|
||||||
|
case matjson::Type::String: return "string";
|
||||||
|
case matjson::Type::Array: return "array";
|
||||||
|
case matjson::Type::Object: return "object";
|
||||||
|
default: return "unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
matjson::Value const& JsonExpectedValue::getJSONRef() const {
|
matjson::Value const& JsonExpectedValue::getJSONRef() const {
|
||||||
return m_impl->scope;
|
return m_impl->scope;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue