Pioneer
JsonUtils.h
Go to the documentation of this file.
1 // Copyright © 2008-2023 Pioneer Developers. See AUTHORS.txt for details
2 // Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3 
4 #ifndef _JSON_UTILS_H
5 #define _JSON_UTILS_H
6 
7 #include "Color.h"
8 #include "FrameId.h"
9 #include "Json.h"
10 #include "Quaternion.h"
11 #include "RefCounted.h"
12 #include "fixed.h"
13 #include "matrix3x3.h"
14 #include "matrix4x4.h"
15 #include "vector3.h"
16 
17 namespace FileSystem {
18  class FileSource;
19  class FileData;
20 } // namespace FileSystem
21 
22 namespace JsonUtils {
23  // Low-level load JSON from a file descriptor.
25  // Load a JSON file from a path and a file source.
26  Json LoadJsonFile(const std::string &filename, FileSystem::FileSource &source);
27  // Load a JSON file from the game's data sources, optionally applying all
28  // files with the the name <filename>.patch as Json Merge Patch (RFC 7386) files
29  Json LoadJsonDataFile(const std::string &filename, bool with_merge = true);
30  // Loads an optionally-gzipped, optionally-CBOR encoded JSON file from the specified source.
31  Json LoadJsonSaveFile(const std::string &filename, FileSystem::FileSource &source);
32 } // namespace JsonUtils
33 
34 // To-JSON functions. These are called explicitly, and are passed a reference to the object to fill.
35 void VectorToJson(Json &jsonObj, const vector2f &vec);
36 void VectorToJson(Json &jsonObj, const vector2d &vec);
37 void VectorToJson(Json &jsonObj, const vector3f &vec);
38 void VectorToJson(Json &jsonObj, const vector3d &vec);
39 void QuaternionToJson(Json &jsonObj, const Quaternionf &quat);
40 void QuaternionToJson(Json &jsonObj, const Quaterniond &quat);
41 void MatrixToJson(Json &jsonObj, const matrix3x3f &mat);
42 void MatrixToJson(Json &jsonObj, const matrix3x3d &mat);
43 void MatrixToJson(Json &jsonObj, const matrix4x4f &mat);
44 void MatrixToJson(Json &jsonObj, const matrix4x4d &mat);
45 void ColorToJson(Json &jsonObj, const Color3ub &col);
46 void ColorToJson(Json &jsonObj, const Color4ub &col);
47 void BinStrToJson(Json &jsonObj, const std::string &str);
48 
49 // Drivers for automatic serialization of custom types. These are implicitly called by assigning to a Json object.
50 template <typename T>
51 void to_json(Json &obj, const vector2<T> &vec) { VectorToJson(obj, vec); }
52 template <typename T>
53 void to_json(Json &obj, const vector3<T> &vec) { VectorToJson(obj, vec); }
54 template <typename T>
55 void to_json(Json &obj, const Quaternion<T> &vec) { QuaternionToJson(obj, vec); }
56 template <typename T>
57 void to_json(Json &obj, const matrix3x3<T> &mat) { MatrixToJson(obj, mat); }
58 template <typename T>
59 void to_json(Json &obj, const matrix4x4<T> &mat) { MatrixToJson(obj, mat); }
60 inline void to_json(Json &obj, const Color3ub &col) { ColorToJson(obj, col); }
61 inline void to_json(Json &obj, const Color4ub &col) { ColorToJson(obj, col); }
62 inline void to_json(Json &obj, const FrameId &t) { obj = t.id(); }
63 
64 void from_json(const Json &obj, fixed &n);
65 void to_json(Json &obj, const fixed &n);
66 
67 // Parse JSON functions. These functions will throw Json::type_error if passed an invalid type.
68 void JsonToVector(vector2f *vec, const Json &jsonObj);
69 void JsonToVector(vector2d *vec, const Json &jsonObj);
70 void JsonToVector(vector3f *vec, const Json &jsonObj);
71 void JsonToVector(vector3d *vec, const Json &jsonObj);
72 void JsonToQuaternion(Quaternionf *pQuat, const Json &jsonObj);
73 void JsonToQuaternion(Quaterniond *pQuat, const Json &jsonObj);
74 void JsonToMatrix(matrix3x3f *pMat, const Json &jsonObj);
75 void JsonToMatrix(matrix3x3d *pMat, const Json &jsonObj);
76 void JsonToMatrix(matrix4x4f *pMat, const Json &jsonObj);
77 void JsonToMatrix(matrix4x4d *pMat, const Json &jsonObj);
78 void JsonToColor(Color3ub *pCol, const Json &jsonObj);
79 void JsonToColor(Color4ub *pCol, const Json &jsonObj);
80 std::string JsonToBinStr(const Json &jsonObj);
81 
82 template <typename T>
83 void from_json(const Json &obj, vector2<T> &vec) { JsonToVector(&vec, obj); }
84 template <typename T>
85 void from_json(const Json &obj, vector3<T> &vec) { JsonToVector(&vec, obj); }
86 template <typename T>
87 void from_json(const Json &obj, Quaternion<T> &vec) { JsonToQuaternion(&vec, obj); }
88 template <typename T>
89 void from_json(const Json &obj, matrix3x3<T> &vec) { JsonToMatrix(&vec, obj); }
90 template <typename T>
91 void from_json(const Json &obj, matrix4x4<T> &vec) { JsonToMatrix(&vec, obj); }
92 inline void from_json(const Json &obj, Color3ub &col) { JsonToColor(&col, obj); }
93 inline void from_json(const Json &obj, Color4ub &col) { JsonToColor(&col, obj); }
94 inline void from_json(const Json &obj, FrameId &id) { id = (int)obj; }
95 
96 #endif /* _JSON_UTILS_H */
void JsonToMatrix(matrix3x3f *pMat, const Json &jsonObj)
Definition: JsonUtils.cpp:377
void MatrixToJson(Json &jsonObj, const matrix3x3f &mat)
Definition: JsonUtils.cpp:172
void JsonToVector(vector2f *vec, const Json &jsonObj)
Definition: JsonUtils.cpp:303
std::string JsonToBinStr(const Json &jsonObj)
Definition: JsonUtils.cpp:502
void VectorToJson(Json &jsonObj, const vector2f &vec)
Definition: JsonUtils.cpp:111
void QuaternionToJson(Json &jsonObj, const Quaternionf &quat)
Definition: JsonUtils.cpp:154
void ColorToJson(Json &jsonObj, const Color3ub &col)
Definition: JsonUtils.cpp:262
void JsonToColor(Color3ub *pCol, const Json &jsonObj)
Definition: JsonUtils.cpp:483
void BinStrToJson(Json &jsonObj, const std::string &str)
Definition: JsonUtils.cpp:281
void from_json(const Json &obj, fixed &n)
Definition: JsonUtils.cpp:528
void JsonToQuaternion(Quaternionf *pQuat, const Json &jsonObj)
Definition: JsonUtils.cpp:349
void to_json(Json &obj, const vector2< T > &vec)
Definition: JsonUtils.h:51
nlohmann::json Json
Definition: Json.h:8
Definition: FileSystem.h:197
Definition: CityOnPlanet.h:27
Definition: JsonUtils.cpp:43
Json LoadJsonDataFile(const std::string &filename, bool with_merge)
Definition: JsonUtils.cpp:65
Json LoadJsonSaveFile(const std::string &filename, FileSystem::FileSource &source)
Definition: JsonUtils.cpp:78
Json LoadJsonFile(const std::string &filename, FileSystem::FileSource &source)
Definition: JsonUtils.cpp:60
Json LoadJson(RefCountedPtr< FileSystem::FileData > fd)
Definition: JsonUtils.cpp:44
Definition: Color.h:167
Definition: Color.h:66
Definition: FrameId.h:9
constexpr size_t id() const
Definition: FrameId.h:23