|
1 | 1 | /* |
2 | | - * Copyright (C) 2020-2024 HERE Europe B.V. |
| 2 | + * Copyright (C) 2020-2026 HERE Europe B.V. |
3 | 3 | * |
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | 5 | * you may not use this file except in compliance with the License. |
|
20 | 20 | #pragma once |
21 | 21 |
|
22 | 22 | #include <string> |
| 23 | +#include <vector> |
23 | 24 |
|
24 | 25 | #include <olp/core/porting/any.h> |
25 | 26 | #include <olp/core/porting/optional.h> |
| 27 | +#include <boost/json/serialize.hpp> |
| 28 | +#include <boost/json/value.hpp> |
| 29 | + |
26 | 30 | #include "JsonHelpers.h" |
27 | 31 |
|
28 | 32 | namespace mockserver { |
@@ -67,110 +71,89 @@ struct Expectation { |
67 | 71 | olp::porting::optional<ResponseTimes> times = olp::porting::none; |
68 | 72 | }; |
69 | 73 |
|
70 | | -void to_json(const Expectation& x, rapidjson::Value& value, |
71 | | - rapidjson::Document::AllocatorType& allocator); |
| 74 | +void to_json(const Expectation& x, boost::json::value& value); |
72 | 75 | void to_json(const Expectation::QueryStringParameter& x, |
73 | | - rapidjson::Value& value, |
74 | | - rapidjson::Document::AllocatorType& allocator); |
75 | | -void to_json(const Expectation::RequestMatcher& x, rapidjson::Value& value, |
76 | | - rapidjson::Document::AllocatorType& allocator); |
77 | | -void to_json(const Expectation::BinaryResponse& x, rapidjson::Value& value, |
78 | | - rapidjson::Document::AllocatorType& allocator); |
79 | | -void to_json(const Expectation::ResponseDelay& x, rapidjson::Value& value, |
80 | | - rapidjson::Document::AllocatorType& allocator); |
81 | | -void to_json(const Expectation::ResponseAction& x, rapidjson::Value& value, |
82 | | - rapidjson::Document::AllocatorType& allocator); |
83 | | -void to_json(const Expectation::ResponseTimes& x, rapidjson::Value& value, |
84 | | - rapidjson::Document::AllocatorType& allocator); |
| 76 | + boost::json::value& value); |
| 77 | +void to_json(const Expectation::RequestMatcher& x, boost::json::value& value); |
| 78 | +void to_json(const Expectation::BinaryResponse& x, boost::json::value& value); |
| 79 | +void to_json(const Expectation::ResponseDelay& x, boost::json::value& value); |
| 80 | +void to_json(const Expectation::ResponseAction& x, boost::json::value& value); |
| 81 | +void to_json(const Expectation::ResponseTimes& x, boost::json::value& value); |
85 | 82 |
|
86 | 83 | std::string serialize(const Expectation& object); |
87 | 84 |
|
88 | | -inline void to_json(const Expectation& x, rapidjson::Value& value, |
89 | | - rapidjson::Document::AllocatorType& allocator) { |
90 | | - value.SetObject(); |
91 | | - serialize("httpRequest", x.request, value, allocator); |
| 85 | +inline void to_json(const Expectation& x, boost::json::value& value) { |
| 86 | + value.emplace_object(); |
| 87 | + serialize("httpRequest", x.request, value); |
92 | 88 |
|
93 | 89 | if (x.action != olp::porting::none) { |
94 | | - serialize("httpResponse", x.action, value, allocator); |
| 90 | + serialize("httpResponse", x.action, value); |
95 | 91 | } |
96 | 92 | if (x.times != olp::porting::none) { |
97 | | - serialize("times", x.times, value, allocator); |
| 93 | + serialize("times", x.times, value); |
98 | 94 | } |
99 | 95 | } |
100 | 96 |
|
101 | 97 | inline void to_json(const Expectation::QueryStringParameter& x, |
102 | | - rapidjson::Value& value, |
103 | | - rapidjson::Document::AllocatorType& allocator) { |
104 | | - value.SetObject(); |
105 | | - serialize("name", x.name, value, allocator); |
106 | | - serialize("values", x.values, value, allocator); |
| 98 | + boost::json::value& value) { |
| 99 | + value.emplace_object(); |
| 100 | + serialize("name", x.name, value); |
| 101 | + serialize("values", x.values, value); |
107 | 102 | } |
108 | 103 |
|
109 | 104 | inline void to_json(const Expectation::RequestMatcher& x, |
110 | | - rapidjson::Value& value, |
111 | | - rapidjson::Document::AllocatorType& allocator) { |
112 | | - value.SetObject(); |
113 | | - serialize("path", x.path, value, allocator); |
114 | | - serialize("method", x.method, value, allocator); |
115 | | - serialize("queryStringParameters", x.query_string_parameters, value, |
116 | | - allocator); |
| 105 | + boost::json::value& value) { |
| 106 | + value.emplace_object(); |
| 107 | + serialize("path", x.path, value); |
| 108 | + serialize("method", x.method, value); |
| 109 | + serialize("queryStringParameters", x.query_string_parameters, value); |
117 | 110 | } |
118 | 111 |
|
119 | 112 | inline void to_json(const Expectation::BinaryResponse& x, |
120 | | - rapidjson::Value& value, |
121 | | - rapidjson::Document::AllocatorType& allocator) { |
122 | | - value.SetObject(); |
123 | | - serialize("type", x.type, value, allocator); |
124 | | - serialize("base64Bytes", x.base64_string, value, allocator); |
| 113 | + boost::json::value& value) { |
| 114 | + value.emplace_object(); |
| 115 | + serialize("type", x.type, value); |
| 116 | + serialize("base64Bytes", x.base64_string, value); |
125 | 117 | } |
126 | 118 |
|
127 | 119 | inline void to_json(const Expectation::ResponseDelay& x, |
128 | | - rapidjson::Value& value, |
129 | | - rapidjson::Document::AllocatorType& allocator) { |
130 | | - value.SetObject(); |
131 | | - serialize("timeUnit", x.time_unit, value, allocator); |
132 | | - serialize("value", x.value, value, allocator); |
| 120 | + boost::json::value& value) { |
| 121 | + value.emplace_object(); |
| 122 | + serialize("timeUnit", x.time_unit, value); |
| 123 | + serialize("value", x.value, value); |
133 | 124 | } |
134 | 125 |
|
135 | 126 | inline void to_json(const Expectation::ResponseAction& x, |
136 | | - rapidjson::Value& value, |
137 | | - rapidjson::Document::AllocatorType& allocator) { |
138 | | - value.SetObject(); |
139 | | - serialize("statusCode", x.status_code, value, allocator); |
| 127 | + boost::json::value& value) { |
| 128 | + value.emplace_object(); |
| 129 | + serialize("statusCode", x.status_code, value); |
140 | 130 |
|
141 | 131 | if (x.body.type() == typeid(std::string)) { |
142 | | - serialize("body", olp::porting::any_cast<std::string>(x.body), value, |
143 | | - allocator); |
| 132 | + serialize("body", olp::porting::any_cast<std::string>(x.body), value); |
144 | 133 | } else if (x.body.type() == typeid(Expectation::BinaryResponse)) { |
145 | 134 | serialize("body", |
146 | 135 | olp::porting::any_cast<Expectation::BinaryResponse>(x.body), |
147 | | - value, allocator); |
| 136 | + value); |
148 | 137 | } |
149 | 138 |
|
150 | 139 | if (x.delay) { |
151 | | - serialize("delay", *x.delay, value, allocator); |
| 140 | + serialize("delay", *x.delay, value); |
152 | 141 | } |
153 | 142 | } |
154 | 143 |
|
155 | 144 | inline void to_json(const Expectation::ResponseTimes& x, |
156 | | - rapidjson::Value& value, |
157 | | - rapidjson::Document::AllocatorType& allocator) { |
158 | | - value.SetObject(); |
159 | | - serialize("remainingTimes", x.remaining_times, value, allocator); |
160 | | - serialize("unlimited", x.unlimited, value, allocator); |
| 145 | + boost::json::value& value) { |
| 146 | + value.emplace_object(); |
| 147 | + serialize("remainingTimes", x.remaining_times, value); |
| 148 | + serialize("unlimited", x.unlimited, value); |
161 | 149 | } |
162 | 150 |
|
163 | 151 | inline std::string serialize(const Expectation& object) { |
164 | | - rapidjson::Document doc; |
165 | | - auto& allocator = doc.GetAllocator(); |
166 | | - |
167 | | - doc.SetObject(); |
168 | | - to_json(object, doc, allocator); |
| 152 | + boost::json::value doc; |
| 153 | + doc.emplace_object(); |
| 154 | + to_json(object, doc); |
169 | 155 |
|
170 | | - rapidjson::StringBuffer buffer; |
171 | | - rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); |
172 | | - doc.Accept(writer); |
173 | | - return buffer.GetString(); |
| 156 | + return boost::json::serialize(doc); |
174 | 157 | }; |
175 | 158 |
|
176 | 159 | } // namespace mockserver |
0 commit comments