1- // Copyright 2019 Google LLC
1+ // Copyright 2020 Google LLC
22//
33// Licensed under the Apache License, Version 2.0 (the "License");
44// you may not use this file except in compliance with the License.
1515#ifndef dap_json_serializer_h
1616#define dap_json_serializer_h
1717
18- #include " dap/protocol.h"
19- #include " dap/serialization.h"
20- #include " dap/types.h"
21-
22- #include < nlohmann/json_fwd.hpp>
18+ #if defined(CPPDAP_JSON_NLOHMANN)
19+ #include " nlohmann_json_serializer.h"
20+ #elif defined(CPPDAP_JSON_RAPID)
21+ #include " rapid_json_serializer.h"
22+ #else
23+ #error "Unrecognised cppdap JSON library"
24+ #endif
2325
2426namespace dap {
2527namespace json {
2628
27- struct Deserializer : public dap ::Deserializer {
28- explicit Deserializer (const std::string&);
29- ~Deserializer ();
30-
31- // dap::Deserializer compliance
32- bool deserialize (boolean* v) const override ;
33- bool deserialize (integer* v) const override ;
34- bool deserialize (number* v) const override ;
35- bool deserialize (string* v) const override ;
36- bool deserialize (object* v) const override ;
37- bool deserialize (any* v) const override ;
38- size_t count () const override ;
39- bool array (const std::function<bool (dap::Deserializer*)>&) const override ;
40- bool field (const std::string& name,
41- const std::function<bool (dap::Deserializer*)>&) const override ;
42-
43- // Unhide base overloads
44- template <typename T>
45- inline bool field (const std::string& name, T* v) {
46- return dap::Deserializer::field (name, v);
47- }
48-
49- template <typename T,
50- typename = std::enable_if<TypeOf<T>::has_custom_serialization>>
51- inline bool deserialize (T* v) const {
52- return dap::Deserializer::deserialize (v);
53- }
54-
55- template <typename T>
56- inline bool deserialize (dap::array<T>* v) const {
57- return dap::Deserializer::deserialize (v);
58- }
59-
60- template <typename T>
61- inline bool deserialize (dap::optional<T>* v) const {
62- return dap::Deserializer::deserialize (v);
63- }
64-
65- template <typename T0, typename ... Types>
66- inline bool deserialize (dap::variant<T0, Types...>* v) const {
67- return dap::Deserializer::deserialize (v);
68- }
69-
70- template <typename T>
71- inline bool field (const std::string& name, T* v) const {
72- return dap::Deserializer::deserialize (name, v);
73- }
74-
75- private:
76- Deserializer (const nlohmann::json*);
77- const nlohmann::json* const json;
78- const bool ownsJson;
79- };
80-
81- struct Serializer : public dap ::Serializer {
82- Serializer ();
83- ~Serializer ();
84-
85- std::string dump () const ;
86-
87- // dap::Serializer compliance
88- bool serialize (boolean v) override ;
89- bool serialize (integer v) override ;
90- bool serialize (number v) override ;
91- bool serialize (const string& v) override ;
92- bool serialize (const dap::object& v) override ;
93- bool serialize (const any& v) override ;
94- bool array (size_t count,
95- const std::function<bool (dap::Serializer*)>&) override ;
96- bool object (const std::function<bool (dap::FieldSerializer*)>&) override ;
97- void remove () override ;
98-
99- // Unhide base overloads
100- template <typename T,
101- typename = std::enable_if<TypeOf<T>::has_custom_serialization>>
102- inline bool serialize (const T& v) {
103- return dap::Serializer::serialize (v);
104- }
105-
106- template <typename T>
107- inline bool serialize (const dap::array<T>& v) {
108- return dap::Serializer::serialize (v);
109- }
110-
111- template <typename T>
112- inline bool serialize (const dap::optional<T>& v) {
113- return dap::Serializer::serialize (v);
114- }
115-
116- template <typename T0, typename ... Types>
117- inline bool serialize (const dap::variant<T0, Types...>& v) {
118- return dap::Serializer::serialize (v);
119- }
120-
121- inline bool serialize (const char * v) { return dap::Serializer::serialize (v); }
122-
123- private:
124- Serializer (nlohmann::json*);
125- nlohmann::json* const json;
126- const bool ownsJson;
127- bool removed = false ;
128- };
29+ #if defined(CPPDAP_JSON_NLOHMANN)
30+ using Deserializer = NlohmannDeserializer;
31+ using Serializer = NlohmannSerializer;
32+ #elif defined(CPPDAP_JSON_RAPID)
33+ using Deserializer = RapidDeserializer;
34+ using Serializer = RapidSerializer;
35+ #else
36+ #error "Unrecognised cppdap JSON library"
37+ #endif
12938
13039} // namespace json
13140} // namespace dap
13241
133- #endif // dap_json_serializer_h
42+ #endif // dap_json_serializer_h
0 commit comments