yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
json.h
Go to the documentation of this file.
1#ifndef YAZE_UTIL_JSON_H
2#define YAZE_UTIL_JSON_H
3
4#include "yaze_config.h"
5
6#if defined(YAZE_WITH_JSON)
7#include "nlohmann/json.hpp"
8namespace yaze {
9using Json = nlohmann::json;
10}
11#else
12#include <stdexcept>
13#include <string>
14#include <vector>
15#include <map>
16
17namespace yaze {
18
19// Stub implementation of nlohmann::json interface to allow compilation without JSON support
20class Json {
21 public:
22 // Construction
23 Json() = default;
24 Json(std::nullptr_t) {}
25 Json(bool) {}
26 Json(int) {}
27 Json(double) {}
28 Json(const char*) {}
29 Json(const std::string&) {}
30 // Templated constructor to catch other types
31 template <typename T> Json(const T&) {}
32
33 // Static factories
34 static Json object() { return Json(); }
35 static Json array() { return Json(); }
36 static Json parse(const std::string&) { throw std::runtime_error("JSON support disabled"); }
37
38 // Assignment
39 template <typename T> Json& operator=(const T&) { return *this; }
40
41 // Access
42 Json& operator[](const std::string&) { return *this; }
43 const Json& operator[](const std::string&) const { return *this; }
44 Json& operator[](size_t) { return *this; }
45 const Json& operator[](size_t) const { return *this; }
46 Json& operator[](int) { return *this; }
47 const Json& operator[](int) const { return *this; }
48
49 template <typename T> T get() const { return T(); }
50 template <typename T> T value(const std::string&, const T& def) const { return def; }
51
52 // Query
53 bool contains(const std::string&) const { return false; }
54 bool is_null() const { return true; }
55 bool is_boolean() const { return false; }
56 bool is_number() const { return false; }
57 bool is_object() const { return false; }
58 bool is_array() const { return false; }
59 bool is_string() const { return false; }
60 bool is_discarded() const { return true; }
61 size_t size() const { return 0; }
62 bool empty() const { return true; }
63
64 // Iteration
65 struct iterator {
66 bool operator!=(const iterator&) const { return false; }
67 void operator++() {}
68 Json& operator*() { static Json j; return j; }
69 std::string key() const { return ""; }
70 Json& value() { static Json j; return j; }
71 };
73 bool operator!=(const const_iterator&) const { return false; }
74 void operator++() {}
75 const Json& operator*() const { static Json j; return j; }
76 };
77
78 iterator begin() { return {}; }
79 iterator end() { return {}; }
80 const_iterator begin() const { return {}; }
81 const_iterator end() const { return {}; }
82
83 // Items
84 struct items_view {
85 iterator begin() { return {}; }
86 iterator end() { return {}; }
87 };
88 items_view items() { return {}; }
89
90 // Output
91 std::string dump(int = -1, char = ' ', bool = false, int = 0) const { return "{}"; }
92
93 // Exceptions
94 class exception : public std::exception {
95 public:
96 const char* what() const noexcept override { return "JSON error"; }
97 };
98};
99
100} // namespace yaze
101#endif
102
103#endif // YAZE_UTIL_JSON_H
104
const char * what() const noexcept override
Definition json.h:96
Json(const std::string &)
Definition json.h:29
bool is_object() const
Definition json.h:57
const Json & operator[](size_t) const
Definition json.h:45
bool is_boolean() const
Definition json.h:55
static Json parse(const std::string &)
Definition json.h:36
Json & operator[](int)
Definition json.h:46
const Json & operator[](const std::string &) const
Definition json.h:43
bool is_array() const
Definition json.h:58
bool is_null() const
Definition json.h:54
static Json object()
Definition json.h:34
bool is_string() const
Definition json.h:59
Json()=default
Json(int)
Definition json.h:26
static Json array()
Definition json.h:35
size_t size() const
Definition json.h:61
Json(const char *)
Definition json.h:28
iterator end()
Definition json.h:79
bool is_number() const
Definition json.h:56
items_view items()
Definition json.h:88
Json(double)
Definition json.h:27
T get() const
Definition json.h:49
Json & operator[](size_t)
Definition json.h:44
Json & operator[](const std::string &)
Definition json.h:42
bool empty() const
Definition json.h:62
const_iterator end() const
Definition json.h:81
std::string dump(int=-1, char=' ', bool=false, int=0) const
Definition json.h:91
const Json & operator[](int) const
Definition json.h:47
Json(bool)
Definition json.h:25
Json(const T &)
Definition json.h:31
bool contains(const std::string &) const
Definition json.h:53
iterator begin()
Definition json.h:78
T value(const std::string &, const T &def) const
Definition json.h:50
Json(std::nullptr_t)
Definition json.h:24
Json & operator=(const T &)
Definition json.h:39
bool is_discarded() const
Definition json.h:60
const_iterator begin() const
Definition json.h:80
const Json & operator*() const
Definition json.h:75
bool operator!=(const const_iterator &) const
Definition json.h:73
iterator begin()
Definition json.h:85
iterator end()
Definition json.h:86
std::string key() const
Definition json.h:69
bool operator!=(const iterator &) const
Definition json.h:66
Json & value()
Definition json.h:70
Json & operator*()
Definition json.h:68
void operator++()
Definition json.h:67