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

bblanchon / ArduinoJson / 16175784963

09 Jul 2025 04:55PM UTC coverage: 99.267% (-0.08%) from 99.35%
16175784963

push

github

bblanchon
Replace `getData()/getResourceManager()` with `getImpl()`

168 of 168 new or added lines in 20 files covered. (100.0%)

7 existing lines in 5 files now uncovered.

3930 of 3959 relevant lines covered (99.27%)

10797.62 hits per line

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

96.67
/src/ArduinoJson/Variant/VariantRefBaseImpl.hpp
1
// ArduinoJson - https://arduinojson.org
2
// Copyright © 2014-2025, Benoit BLANCHON
3
// MIT License
4

5
#pragma once
6

7
#include <ArduinoJson/Array/JsonArray.hpp>
8
#include <ArduinoJson/Object/JsonObject.hpp>
9
#include <ArduinoJson/Variant/VariantRefBase.hpp>
10

11
ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
12

13
template <typename TDerived>
14
inline JsonVariant VariantRefBase<TDerived>::add() const {
3✔
15
  return add<JsonVariant>();
3✔
16
}
17

18
template <typename TDerived>
19
template <typename T>
20
inline T VariantRefBase<TDerived>::as() const {
1,893✔
21
  using variant_type =  // JsonVariantConst or JsonVariant?
22
      typename function_traits<decltype(&Converter<T>::fromJson)>::arg1_type;
23
  return Converter<T>::fromJson(getVariant<variant_type>());
1,893✔
24
}
25

26
template <typename TDerived>
27
inline JsonArray VariantRefBase<TDerived>::createNestedArray() const {
1✔
28
  return add<JsonArray>();
1✔
29
}
30

31
template <typename TDerived>
32
template <typename TChar>
33
inline JsonArray VariantRefBase<TDerived>::createNestedArray(TChar* key) const {
2✔
34
  return operator[](key).template to<JsonArray>();
2✔
35
}
36

37
template <typename TDerived>
38
template <typename TString>
39
inline JsonArray VariantRefBase<TDerived>::createNestedArray(
1✔
40
    const TString& key) const {
41
  return operator[](key).template to<JsonArray>();
1✔
42
}
43

44
template <typename TDerived>
45
inline JsonObject VariantRefBase<TDerived>::createNestedObject() const {
1✔
46
  return add<JsonObject>();
1✔
47
}
48

49
template <typename TDerived>
50
template <typename TChar>
51
inline JsonObject VariantRefBase<TDerived>::createNestedObject(
2✔
52
    TChar* key) const {
53
  return operator[](key).template to<JsonObject>();
2✔
54
}
55

56
template <typename TDerived>
57
template <typename TString>
58
inline JsonObject VariantRefBase<TDerived>::createNestedObject(
1✔
59
    const TString& key) const {
60
  return operator[](key).template to<JsonObject>();
1✔
61
}
62

63
template <typename TDerived>
64
inline void convertToJson(const VariantRefBase<TDerived>& src,
10✔
65
                          JsonVariant dst) {
66
  dst.set(src.template as<JsonVariantConst>());
10✔
67
}
10✔
68

69
template <typename TDerived>
70
template <typename T, enable_if_t<is_same<T, JsonVariant>::value, int>>
71
inline T VariantRefBase<TDerived>::add() const {
41✔
72
  auto impl = getOrCreateArray();
41✔
73
  return JsonVariant(impl.addElement(), impl.getResourceManager());
41✔
74
}
75

76
template <typename TDerived>
77
template <typename TString, enable_if_t<IsString<TString>::value, int>>
78
inline bool VariantRefBase<TDerived>::containsKey(const TString& key) const {
4✔
79
  return getImpl().getMember(adaptString(key)) != 0;
4✔
80
}
81

82
template <typename TDerived>
83
template <typename TChar, enable_if_t<IsString<TChar*>::value, int>>
84
inline bool VariantRefBase<TDerived>::containsKey(TChar* key) const {
9✔
85
  return getImpl().getMember(adaptString(key)) != 0;
9✔
86
}
87

88
template <typename TDerived>
89
template <typename TVariant, enable_if_t<IsVariant<TVariant>::value, int>>
90
inline bool VariantRefBase<TDerived>::containsKey(const TVariant& key) const {
2✔
91
  return containsKey(key.template as<const char*>());
2✔
92
}
93

94
template <typename TDerived>
95
inline JsonVariant VariantRefBase<TDerived>::getVariant() const {
96
  return JsonVariant(getImpl());
281✔
97
}
98

99
template <typename TDerived>
100
template <typename T>
101
inline bool VariantRefBase<TDerived>::is() const {
102
  using variant_type =  // JsonVariantConst or JsonVariant?
103
      typename function_traits<decltype(&Converter<T>::checkJson)>::arg1_type;
104
  return Converter<T>::checkJson(getVariant<variant_type>());
365✔
105
}
106

107
template <typename TDerived>
108
inline ElementProxy<TDerived> VariantRefBase<TDerived>::operator[](
102✔
109
    size_t index) const {
110
  return {derived(), index};
102✔
111
}
112

113
template <typename TDerived>
114
template <typename TChar,
115
          enable_if_t<IsString<TChar*>::value && !is_const<TChar>::value, int>>
116
inline MemberProxy<TDerived, AdaptedString<TChar*>>
117
VariantRefBase<TDerived>::operator[](TChar* key) const {
118
  return {derived(), adaptString(key)};
9✔
119
}
120

121
template <typename TDerived>
122
template <typename TString, enable_if_t<IsString<TString>::value, int>>
123
inline MemberProxy<TDerived, AdaptedString<TString>>
124
VariantRefBase<TDerived>::operator[](const TString& key) const {
125
  return {derived(), adaptString(key)};
179✔
126
}
127

128
template <typename TDerived>
129
template <typename TConverter, typename T>
130
inline bool VariantRefBase<TDerived>::doSet(const T& value, false_type) const {
66,344✔
131
  auto impl = getOrCreateImpl();
66,344✔
132
  TConverter::toJson(value, JsonVariant(impl));
66,344✔
133
  auto resources = impl.getResourceManager();
66,344✔
134
  return resources && !resources->overflowed();
66,344✔
135
}
136

137
template <typename TDerived>
138
template <typename TConverter, typename T>
139
inline bool VariantRefBase<TDerived>::doSet(const T& value, true_type) const {
1,762✔
140
  auto impl = getOrCreateImpl();
1,762✔
141
  return TConverter::toJson(value, JsonVariant(impl));
1,762✔
142
}
143

144
template <typename TDerived>
145
template <typename T, enable_if_t<is_same<T, JsonArray>::value, int>>
146
inline JsonArray VariantRefBase<TDerived>::to() const {
256✔
147
  auto impl = getOrCreateImpl();
256✔
148
  if (!impl.getData())
256✔
UNCOV
149
    return JsonArray();
×
150
  impl.clear();
256✔
151
  impl.getData()->toArray();
256✔
152
  return JsonArray(impl);
256✔
153
}
154

155
template <typename TDerived>
156
template <typename T, enable_if_t<is_same<T, JsonObject>::value, int>>
157
JsonObject VariantRefBase<TDerived>::to() const {
317✔
158
  auto impl = getOrCreateImpl();
317✔
159
  if (!impl.getData())
317✔
UNCOV
160
    return JsonObject();
×
161
  impl.clear();
317✔
162
  impl.getData()->toObject();
317✔
163
  return JsonObject(impl);
317✔
164
}
165

166
template <typename TDerived>
167
template <typename T, enable_if_t<is_same<T, JsonVariant>::value, int>>
168
JsonVariant VariantRefBase<TDerived>::to() const {
519✔
169
  auto impl = getOrCreateImpl();
519✔
170
  impl.clear();
519✔
171
  return JsonVariant(impl);
519✔
172
}
173

174
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