@@ -125,6 +125,54 @@ void tag_invoke(boost::json::value_from_tag const& unused,
125125 }
126126}
127127
128+ tl::expected<enum EvaluationReason::BigSegmentsStatus, JsonError> tag_invoke (
129+ boost::json::value_to_tag<
130+ tl::expected<enum EvaluationReason::BigSegmentsStatus,
131+ JsonError>> const & unused,
132+ boost::json::value const & json_value) {
133+ boost::ignore_unused (unused);
134+
135+ if (!json_value.is_string ()) {
136+ return tl::unexpected (JsonError::kSchemaFailure );
137+ }
138+ auto const & str = json_value.as_string ();
139+ if (str == " HEALTHY" ) {
140+ return EvaluationReason::BigSegmentsStatus::kHealthy ;
141+ }
142+ if (str == " STALE" ) {
143+ return EvaluationReason::BigSegmentsStatus::kStale ;
144+ }
145+ if (str == " NOT_CONFIGURED" ) {
146+ return EvaluationReason::BigSegmentsStatus::kNotConfigured ;
147+ }
148+ if (str == " STORE_ERROR" ) {
149+ return EvaluationReason::BigSegmentsStatus::kStoreError ;
150+ }
151+ return tl::make_unexpected (JsonError::kSchemaFailure );
152+ }
153+
154+ void tag_invoke (boost::json::value_from_tag const & unused,
155+ boost::json::value& json_value,
156+ enum EvaluationReason::BigSegmentsStatus const & status) {
157+ boost::ignore_unused (unused);
158+
159+ auto & str = json_value.emplace_string ();
160+ switch (status) {
161+ case EvaluationReason::BigSegmentsStatus::kHealthy :
162+ str = " HEALTHY" ;
163+ break ;
164+ case EvaluationReason::BigSegmentsStatus::kStale :
165+ str = " STALE" ;
166+ break ;
167+ case EvaluationReason::BigSegmentsStatus::kNotConfigured :
168+ str = " NOT_CONFIGURED" ;
169+ break ;
170+ case EvaluationReason::BigSegmentsStatus::kStoreError :
171+ str = " STORE_ERROR" ;
172+ break ;
173+ }
174+ }
175+
128176tl::expected<EvaluationReason, JsonError> tag_invoke (
129177 boost::json::value_to_tag<tl::expected<EvaluationReason, JsonError>> const &
130178 unused,
@@ -172,17 +220,25 @@ tl::expected<EvaluationReason, JsonError> tag_invoke(
172220 auto in_experiment =
173221 ValueOrDefault (in_experiment_iter, json_obj.end (), false );
174222
175- auto * big_segment_status_iter = json_obj.find (" bigSegmentStatus" );
176- auto big_segment_status =
177- ValueAsOpt<std::string>(big_segment_status_iter, json_obj.end ());
223+ auto * big_segments_status_iter = json_obj.find (" bigSegmentsStatus" );
224+ std::optional<enum EvaluationReason::BigSegmentsStatus>
225+ big_segments_status;
226+ if (big_segments_status_iter != json_obj.end ()) {
227+ auto parsed = boost::json::value_to<tl::expected<
228+ enum EvaluationReason::BigSegmentsStatus, JsonError>>(
229+ big_segments_status_iter->value ());
230+ if (parsed) {
231+ big_segments_status = *parsed;
232+ }
233+ }
178234
179235 return EvaluationReason{*kind,
180236 error_kind,
181237 rule_index,
182238 rule_id,
183239 prerequisite_key,
184240 in_experiment,
185- big_segment_status };
241+ big_segments_status };
186242 }
187243 return tl::unexpected (JsonError::kSchemaFailure );
188244}
@@ -197,8 +253,9 @@ void tag_invoke(boost::json::value_from_tag const& unused,
197253 if (auto error_kind = reason.ErrorKind ()) {
198254 obj.emplace (" errorKind" , boost::json::value_from (*error_kind));
199255 }
200- if (auto big_segment_status = reason.BigSegmentStatus ()) {
201- obj.emplace (" bigSegmentStatus" , *big_segment_status);
256+ if (auto big_segments_status = reason.BigSegmentsStatus ()) {
257+ obj.emplace (" bigSegmentsStatus" ,
258+ boost::json::value_from (*big_segments_status));
202259 }
203260 if (auto rule_id = reason.RuleId ()) {
204261 obj.emplace (" ruleId" , *rule_id);
0 commit comments