NAP
jsonreader.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7 // Local Includes
8 #include "rtti.h"
9 #include "path.h"
10 #include "deserializeresult.h"
11 #include "epropertyvalidationmode.h"
12 
13 // External Includes
14 #include <utility/dllexport.h>
15 #include <rapidjson/pointer.h>
16 #include <string>
17 
18 namespace nap
19 {
20  namespace utility
21  {
22  class ErrorState;
23  }
24 
25  namespace rtti
26  {
27  class Factory;
28 
32  struct NAPAPI ReadState
33  {
34  ReadState(EPropertyValidationMode propertyValidationMode, EPointerPropertyMode pointerPropertyMode, Factory& factory, DeserializeResult& result) :
35  mPropertyValidationMode(propertyValidationMode),
36  mPointerPropertyMode(pointerPropertyMode),
37  mFactory(factory),
38  mResult(result)
39  { }
40 
46  std::unordered_set<std::string> mObjectIDs;
47  };
48 
49 
62  bool NAPAPI deserializeJSON(const std::string& json, EPropertyValidationMode propertyValidationMode, EPointerPropertyMode pointerPropertyMode, Factory& factory, DeserializeResult& result, utility::ErrorState& errorState);
63 
76  bool NAPAPI deserializeJSONFile(const std::string& path, EPropertyValidationMode propertyValidationMode, EPointerPropertyMode pointerPropertyMode, Factory& factory, DeserializeResult& result, utility::ErrorState& errorState);
77 
90  bool NAPAPI deserializeObjects(const rapidjson::Value& jsonArray, EPropertyValidationMode propertyValidationMode, EPointerPropertyMode pointerPropertyMode, Factory& factory, DeserializeResult& result, utility::ErrorState& errorState);
91 
100  std::unique_ptr<nap::rtti::Object> NAPAPI getObjectFromJSONFile(const std::string& path, EPropertyValidationMode propertyValidationMode, Factory& factory, utility::ErrorState& errorState);
101 
110  template<typename T>
111  std::unique_ptr<T> getObjectFromJSONFile(const std::string& path, EPropertyValidationMode propertyValidationMode, Factory& factory, utility::ErrorState& errorState);
112 
119  bool NAPAPI JSONDocumentFromString(const std::string& json, rapidjson::Document& document, nap::utility::ErrorState& errorState);
120 
121 
123  // Template Definitions
125 
126  template<typename T>
127  std::unique_ptr<T> getObjectFromJSONFile(const std::string& path, EPropertyValidationMode propertyValidationMode, Factory& factory, utility::ErrorState& errorState)
128  {
129  auto obj = getObjectFromJSONFile(path, propertyValidationMode, factory, errorState);
130  if (obj == nullptr)
131  {
132  errorState.fail("Failed to extract object of type: %s",
133  RTTI_OF(T).get_name().to_string().c_str());
134  return{};
135  }
136  auto t = rtti_cast<T>(obj);
137  if (t == nullptr)
138  errorState.fail("Expected %s, got %s in file %s",
139  RTTI_OF(T).get_name().data(),
140  obj->get_type().get_name().data(),
141  path.c_str());
142  return t;
143  }
144 
145  } //< End Namespace nap
146 }
nap::rtti::ReadState::mPropertyValidationMode
EPropertyValidationMode mPropertyValidationMode
Definition: jsonreader.h:41
nap::rtti::ReadState::mObjectIDs
std::unordered_set< std::string > mObjectIDs
Definition: jsonreader.h:46
nap::rtti::ReadState
Definition: jsonreader.h:32
nap::rtti::ReadState::mFactory
Factory & mFactory
Definition: jsonreader.h:44
nap::rtti::ReadState::mPointerPropertyMode
EPointerPropertyMode mPointerPropertyMode
Definition: jsonreader.h:42
nap::utility::ErrorState
Definition: errorstate.h:19
nap::rtti::JSONDocumentFromString
bool NAPAPI JSONDocumentFromString(const std::string &json, rapidjson::Document &document, nap::utility::ErrorState &errorState)
nap::utility::ErrorState::fail
void fail(T &&errorMessage)
Definition: errorstate.h:73
nap::rtti::deserializeJSON
bool NAPAPI deserializeJSON(const std::string &json, EPropertyValidationMode propertyValidationMode, EPointerPropertyMode pointerPropertyMode, Factory &factory, DeserializeResult &result, utility::ErrorState &errorState)
nap::rtti::getObjectFromJSONFile
std::unique_ptr< nap::rtti::Object > NAPAPI getObjectFromJSONFile(const std::string &path, EPropertyValidationMode propertyValidationMode, Factory &factory, utility::ErrorState &errorState)
Definition: jsonreader.h:127
nap::rtti::ReadState::mResult
DeserializeResult & mResult
Definition: jsonreader.h:45
nap::rtti::deserializeJSONFile
bool NAPAPI deserializeJSONFile(const std::string &path, EPropertyValidationMode propertyValidationMode, EPointerPropertyMode pointerPropertyMode, Factory &factory, DeserializeResult &result, utility::ErrorState &errorState)
nap::rtti::DeserializeResult
Definition: deserializeresult.h:40
nap::rtti::EPropertyValidationMode
EPropertyValidationMode
Definition: epropertyvalidationmode.h:11
nap::rtti::Factory
Definition: factory.h:78
nap::rtti::EPointerPropertyMode
EPointerPropertyMode
Definition: epropertyvalidationmode.h:26
nap
Definition: templateapp.h:17
nap::rtti::ReadState::mCurrentRTTIPath
Path mCurrentRTTIPath
Definition: jsonreader.h:43
nap::rtti::Path
Definition: path.h:409
nap::rtti::ReadState::ReadState
ReadState(EPropertyValidationMode propertyValidationMode, EPointerPropertyMode pointerPropertyMode, Factory &factory, DeserializeResult &result)
Definition: jsonreader.h:34
nap::rtti::deserializeObjects
bool NAPAPI deserializeObjects(const rapidjson::Value &jsonArray, EPropertyValidationMode propertyValidationMode, EPointerPropertyMode pointerPropertyMode, Factory &factory, DeserializeResult &result, utility::ErrorState &errorState)