• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

bblanchon / ArduinoJson / 4766013433

pending completion
4766013433

push

github

Benoit Blanchon
Increase coverage

8 of 8 new or added lines in 3 files covered. (100.0%)

3321 of 3342 relevant lines covered (99.37%)

6648.12 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

93.15
/src/ArduinoJson/Variant/VariantImpl.hpp
1
// ArduinoJson - https://arduinojson.org
2
// Copyright © 2014-2023, Benoit BLANCHON
3
// MIT License
4

5
#pragma once
6

7
#include <ArduinoJson/Array/JsonArray.hpp>
8
#include <ArduinoJson/Configuration.hpp>
9
#include <ArduinoJson/Numbers/convertNumber.hpp>
10
#include <ArduinoJson/Numbers/parseNumber.hpp>
11
#include <ArduinoJson/Object/JsonObject.hpp>
12
#include <ArduinoJson/Variant/JsonVariant.hpp>
13

14
#include <string.h>  // for strcmp
15

16
ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
17

18
template <typename T>
19
inline T VariantData::asIntegral() const {
210✔
20
  switch (type()) {
210✔
21
    case VALUE_IS_BOOLEAN:
2✔
22
      return _content.asBoolean;
2✔
23
    case VALUE_IS_UNSIGNED_INTEGER:
87✔
24
      return convertNumber<T>(_content.asUnsignedInteger);
87✔
25
    case VALUE_IS_SIGNED_INTEGER:
84✔
26
      return convertNumber<T>(_content.asSignedInteger);
84✔
27
    case VALUE_IS_LINKED_STRING:
8✔
28
    case VALUE_IS_OWNED_STRING:
29
      return parseNumber<T>(_content.asString.data);
8✔
30
    case VALUE_IS_FLOAT:
19✔
31
      return convertNumber<T>(_content.asFloat);
19✔
32
    default:
10✔
33
      return 0;
10✔
34
  }
35
}
36

37
inline bool VariantData::asBoolean() const {
554✔
38
  switch (type()) {
554✔
39
    case VALUE_IS_BOOLEAN:
307✔
40
      return _content.asBoolean;
307✔
41
    case VALUE_IS_SIGNED_INTEGER:
7✔
42
    case VALUE_IS_UNSIGNED_INTEGER:
43
      return _content.asUnsignedInteger != 0;
7✔
44
    case VALUE_IS_FLOAT:
5✔
45
      return _content.asFloat != 0;
5✔
46
    case VALUE_IS_NULL:
6✔
47
      return false;
6✔
48
    default:
229✔
49
      return true;
229✔
50
  }
51
}
52

53
// T = float/double
54
template <typename T>
55
inline T VariantData::asFloat() const {
117✔
56
  switch (type()) {
117✔
57
    case VALUE_IS_BOOLEAN:
2✔
58
      return static_cast<T>(_content.asBoolean);
2✔
59
    case VALUE_IS_UNSIGNED_INTEGER:
3✔
60
      return static_cast<T>(_content.asUnsignedInteger);
3✔
61
    case VALUE_IS_SIGNED_INTEGER:
6✔
62
      return static_cast<T>(_content.asSignedInteger);
6✔
63
    case VALUE_IS_LINKED_STRING:
1✔
64
    case VALUE_IS_OWNED_STRING:
65
      return parseNumber<T>(_content.asString.data);
1✔
66
    case VALUE_IS_FLOAT:
103✔
67
      return static_cast<T>(_content.asFloat);
103✔
68
    default:
2✔
69
      return 0;
2✔
70
  }
71
}
72

73
inline JsonString VariantData::asString() const {
445✔
74
  switch (type()) {
445✔
75
    case VALUE_IS_LINKED_STRING:
36✔
76
      return JsonString(_content.asString.data, _content.asString.size,
36✔
77
                        JsonString::Linked);
36✔
78
    case VALUE_IS_OWNED_STRING:
70✔
79
      return JsonString(_content.asString.data, _content.asString.size,
70✔
80
                        JsonString::Copied);
70✔
81
    default:
339✔
82
      return JsonString();
339✔
83
  }
84
}
85

86
inline JsonString VariantData::asRaw() const {
3✔
87
  switch (type()) {
3✔
88
    case VALUE_IS_LINKED_RAW:
×
89
      return JsonString(_content.asString.data, _content.asString.size,
×
90
                        JsonString::Linked);
×
91
    case VALUE_IS_OWNED_RAW:
3✔
92
      return JsonString(_content.asString.data, _content.asString.size,
3✔
93
                        JsonString::Copied);
3✔
94
    default:
×
95
      return JsonString();
×
96
  }
97
}
98

99
template <typename TDerived>
100
inline JsonVariant VariantRefBase<TDerived>::add() const {
101
  return JsonVariant(getPool(),
102
                     variantAddElement(getOrCreateData(), getPool()));
234✔
103
}
104

105
template <typename TDerived>
106
inline JsonVariant VariantRefBase<TDerived>::getVariant() const {
107
  return JsonVariant(getPool(), getData());
1,372✔
108
}
109

110
template <typename TDerived>
111
inline JsonVariant VariantRefBase<TDerived>::getOrCreateVariant() const {
112
  return JsonVariant(getPool(), getOrCreateData());
133,950✔
113
}
114

115
template <typename TDerived>
116
template <typename T>
117
inline typename enable_if<is_same<T, JsonArray>::value, JsonArray>::type
118
VariantRefBase<TDerived>::to() const {
222✔
119
  return JsonArray(getPool(), variantToArray(getOrCreateData(), getPool()));
666✔
120
}
121

122
template <typename TDerived>
123
template <typename T>
124
typename enable_if<is_same<T, JsonObject>::value, JsonObject>::type
125
VariantRefBase<TDerived>::to() const {
274✔
126
  return JsonObject(getPool(), variantToObject(getOrCreateData(), getPool()));
822✔
127
}
128

129
template <typename TDerived>
130
template <typename T>
131
typename enable_if<is_same<T, JsonVariant>::value, JsonVariant>::type
132
VariantRefBase<TDerived>::to() const {
400✔
133
  variantSetNull(getOrCreateData(), getPool());
800✔
134
  return *this;
400✔
135
}
136

137
template <typename TDerived>
138
inline void convertToJson(const VariantRefBase<TDerived>& src,
8✔
139
                          JsonVariant dst) {
140
  dst.set(src.template as<JsonVariantConst>());
8✔
141
}
8✔
142

143
ARDUINOJSON_END_PRIVATE_NAMESPACE
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc