xref: /aosp_15_r20/external/openscreen/util/json/json_value.cc (revision 3f982cf4871df8771c9d4abe6e9a6f8d829b2736)
1*3f982cf4SFabien Sanglard // Copyright 2019 The Chromium Authors. All rights reserved.
2*3f982cf4SFabien Sanglard // Use of this source code is governed by a BSD-style license that can be
3*3f982cf4SFabien Sanglard // found in the LICENSE file.
4*3f982cf4SFabien Sanglard 
5*3f982cf4SFabien Sanglard #include "util/json/json_value.h"
6*3f982cf4SFabien Sanglard 
7*3f982cf4SFabien Sanglard namespace openscreen {
8*3f982cf4SFabien Sanglard 
MaybeGetInt(const Json::Value & message,const char * first,const char * last)9*3f982cf4SFabien Sanglard absl::optional<int> MaybeGetInt(const Json::Value& message,
10*3f982cf4SFabien Sanglard                                 const char* first,
11*3f982cf4SFabien Sanglard                                 const char* last) {
12*3f982cf4SFabien Sanglard   const Json::Value* value = message.find(first, last);
13*3f982cf4SFabien Sanglard   absl::optional<int> result;
14*3f982cf4SFabien Sanglard   if (value && value->isInt()) {
15*3f982cf4SFabien Sanglard     result = value->asInt();
16*3f982cf4SFabien Sanglard   }
17*3f982cf4SFabien Sanglard   return result;
18*3f982cf4SFabien Sanglard }
19*3f982cf4SFabien Sanglard 
MaybeGetString(const Json::Value & message)20*3f982cf4SFabien Sanglard absl::optional<absl::string_view> MaybeGetString(const Json::Value& message) {
21*3f982cf4SFabien Sanglard   if (message.isString()) {
22*3f982cf4SFabien Sanglard     const char* begin = nullptr;
23*3f982cf4SFabien Sanglard     const char* end = nullptr;
24*3f982cf4SFabien Sanglard     message.getString(&begin, &end);
25*3f982cf4SFabien Sanglard     if (begin && end >= begin) {
26*3f982cf4SFabien Sanglard       return absl::string_view(begin, end - begin);
27*3f982cf4SFabien Sanglard     }
28*3f982cf4SFabien Sanglard   }
29*3f982cf4SFabien Sanglard   return absl::nullopt;
30*3f982cf4SFabien Sanglard }
31*3f982cf4SFabien Sanglard 
MaybeGetString(const Json::Value & message,const char * first,const char * last)32*3f982cf4SFabien Sanglard absl::optional<absl::string_view> MaybeGetString(const Json::Value& message,
33*3f982cf4SFabien Sanglard                                                  const char* first,
34*3f982cf4SFabien Sanglard                                                  const char* last) {
35*3f982cf4SFabien Sanglard   const Json::Value* value = message.find(first, last);
36*3f982cf4SFabien Sanglard   absl::optional<absl::string_view> result;
37*3f982cf4SFabien Sanglard   if (value && value->isString()) {
38*3f982cf4SFabien Sanglard     return MaybeGetString(*value);
39*3f982cf4SFabien Sanglard   }
40*3f982cf4SFabien Sanglard   return result;
41*3f982cf4SFabien Sanglard }
42*3f982cf4SFabien Sanglard 
43*3f982cf4SFabien Sanglard }  // namespace openscreen
44