Goby3  3.1.5a
2024.05.23
traits.h
Go to the documentation of this file.
1 #ifndef JWT_CPP_NLOHMANN_JSON_TRAITS_H
2 #define JWT_CPP_NLOHMANN_JSON_TRAITS_H
3 
6 
7 namespace jwt
8 {
9 namespace traits
10 {
12 {
14  using value_type = json;
17  using string_type = std::string; // current limitation of traits implementation
21 
22  static jwt::json::type get_type(const json& val)
23  {
24  using jwt::json::type;
25 
26  if (val.type() == json::value_t::boolean)
27  return type::boolean;
28  // nlohmann internally tracks two types of integers
29  if (val.type() == json::value_t::number_integer)
30  return type::integer;
31  if (val.type() == json::value_t::number_unsigned)
32  return type::integer;
33  if (val.type() == json::value_t::number_float)
34  return type::number;
35  if (val.type() == json::value_t::string)
36  return type::string;
37  if (val.type() == json::value_t::array)
38  return type::array;
39  if (val.type() == json::value_t::object)
40  return type::object;
41 
42  throw std::logic_error("invalid type");
43  }
44 
45  static json::object_t as_object(const json& val)
46  {
47  if (val.type() != json::value_t::object)
48  throw std::bad_cast();
49  return val.get<json::object_t>();
50  }
51 
52  static std::string as_string(const json& val)
53  {
54  if (val.type() != json::value_t::string)
55  throw std::bad_cast();
56  return val.get<std::string>();
57  }
58 
59  static json::array_t as_array(const json& val)
60  {
61  if (val.type() != json::value_t::array)
62  throw std::bad_cast();
63  return val.get<json::array_t>();
64  }
65 
66  static int64_t as_int(const json& val)
67  {
68  switch (val.type())
69  {
71  case json::value_t::number_unsigned: return val.get<int64_t>();
72  default: throw std::bad_cast();
73  }
74  }
75 
76  static bool as_bool(const json& val)
77  {
78  if (val.type() != json::value_t::boolean)
79  throw std::bad_cast();
80  return val.get<bool>();
81  }
82 
83  static double as_number(const json& val)
84  {
85  if (val.type() != json::value_t::number_float)
86  throw std::bad_cast();
87  return val.get<double>();
88  }
89 
90  static bool parse(json& val, std::string str)
91  {
92  val = json::parse(str.begin(), str.end());
93  return true;
94  }
95 
96  static std::string serialize(const json& val) { return val.dump(); }
97 };
98 } // namespace traits
99 } // namespace jwt
100 
101 #endif
jwt::traits::nlohmann_json::as_object
static json::object_t as_object(const json &val)
Definition: traits.h:45
detail::value_t::boolean
@ boolean
boolean value
basic_json::object_t
ObjectType< StringType, basic_json, default_object_comparator_t, AllocatorType< std::pair< const StringType, basic_json > >> object_t
a type for an object
Definition: json.hpp:19515
jwt::traits::nlohmann_json::as_bool
static bool as_bool(const json &val)
Definition: traits.h:76
jwt::traits::nlohmann_json::object_type
json::object_t object_type
Definition: traits.h:15
jwt::traits::nlohmann_json::array_type
json::array_t array_type
Definition: traits.h:16
jwt::traits::nlohmann_json::as_int
static int64_t as_int(const json &val)
Definition: traits.h:66
jwt::traits::nlohmann_json::as_number
static double as_number(const json &val)
Definition: traits.h:83
detail::value_t::number_unsigned
@ number_unsigned
number value (unsigned integer)
detail::value_t::number_float
@ number_float
number value (floating-point)
goby::time::str
std::string str(TimeType value=SystemClock::now< TimeType >())
Returns the provided time (or current time if omitted) as a human-readable string.
Definition: convert.h:191
jwt::traits::nlohmann_json::as_string
static std::string as_string(const json &val)
Definition: traits.h:52
basic_json::boolean_t
BooleanType boolean_t
a type for a boolean
Definition: json.hpp:19527
jwt::traits::nlohmann_json::get_type
static jwt::json::type get_type(const json &val)
Definition: traits.h:22
jwt::traits::nlohmann_json::parse
static bool parse(json &val, std::string str)
Definition: traits.h:90
jwt::traits::nlohmann_json
Definition: traits.h:11
detail::value_t::string
@ string
string value
basic_json::number_integer_t
NumberIntegerType number_integer_t
a type for a number (integer)
Definition: json.hpp:19531
jwt::traits::nlohmann_json::json
nlohmann::json json
Definition: traits.h:13
jwt::traits::nlohmann_json::string_type
std::string string_type
Definition: traits.h:17
jwt
JSON Web Token.
Definition: base.h:18
detail::value_t::number_integer
@ number_integer
number value (signed integer)
jwt::json::type
type
Generic JSON types used in JWTs.
Definition: jwt.h:2071
detail::value_t::array
@ array
array (ordered collection of values)
detail::value_t::object
@ object
object (unordered set of name/value pairs)
jwt::traits::nlohmann_json::value_type
json value_type
Definition: traits.h:14
jwt::traits::nlohmann_json::integer_type
json::number_integer_t integer_type
Definition: traits.h:19
basic_json::number_float_t
NumberFloatType number_float_t
a type for a number (floating-point)
Definition: json.hpp:19539
json.hpp
jwt.h
json
basic_json<> json
default specialization
Definition: json.hpp:3404
jwt::traits::nlohmann_json::number_type
json::number_float_t number_type
Definition: traits.h:18
jwt::traits::nlohmann_json::serialize
static std::string serialize(const json &val)
Definition: traits.h:96
jwt::traits::nlohmann_json::as_array
static json::array_t as_array(const json &val)
Definition: traits.h:59
jwt::traits::nlohmann_json::boolean_type
json::boolean_t boolean_type
Definition: traits.h:20
basic_json::array_t
ArrayType< basic_json, AllocatorType< basic_json > > array_t
a type for an array
Definition: json.hpp:19519