Coverage Report

Created: 2026-06-10 06:19

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/arduinojson/src/ArduinoJson/Variant/JsonVariant.hpp
Line
Count
Source
1
// ArduinoJson - https://arduinojson.org
2
// Copyright © 2014-2025, Benoit BLANCHON
3
// MIT License
4
5
#pragma once
6
7
#include <ArduinoJson/Variant/VariantRefBase.hpp>
8
9
ARDUINOJSON_BEGIN_PUBLIC_NAMESPACE
10
11
// A reference to a value in a JsonDocument.
12
// https://arduinojson.org/v7/api/jsonvariant/
13
class JsonVariant : public detail::VariantRefBase<JsonVariant>,
14
                    public detail::VariantOperators<JsonVariant> {
15
  friend class detail::VariantAttorney;
16
17
 public:
18
  // Creates an unbound reference.
19
0
  JsonVariant() {}
20
21
  // INTERNAL USE ONLY
22
  JsonVariant(detail::VariantData* data, detail::ResourceManager* resources)
23
0
      : impl_(data, resources) {}
24
25
  // INTERNAL USE ONLY
26
0
  JsonVariant(detail::VariantImpl impl) : impl_(impl) {}
27
28
 private:
29
0
  detail::ResourceManager* getResourceManager() const {
30
0
    return impl_.resources();
31
0
  }
32
33
0
  detail::VariantData* getData() const {
34
0
    return impl_.data();
35
0
  }
36
37
0
  detail::VariantData* getOrCreateData() const {
38
0
    return impl_.data();
39
0
  }
40
41
  mutable detail::VariantImpl impl_;
42
};
43
44
namespace detail {
45
bool copyVariant(JsonVariant dst, JsonVariantConst src);
46
}
47
48
template <>
49
struct Converter<JsonVariant> : private detail::VariantAttorney {
50
0
  static bool toJson(JsonVariantConst src, JsonVariant dst) {
51
0
    return copyVariant(dst, src);
52
0
  }
53
54
0
  static JsonVariant fromJson(JsonVariant src) {
55
0
    return src;
56
0
  }
57
58
0
  static bool checkJson(JsonVariant src) {
59
0
    auto data = getData(src);
60
0
    return !!data;
61
0
  }
62
};
63
64
template <>
65
struct Converter<JsonVariantConst> : private detail::VariantAttorney {
66
0
  static bool toJson(JsonVariantConst src, JsonVariant dst) {
67
0
    return copyVariant(dst, src);
68
0
  }
69
70
0
  static JsonVariantConst fromJson(JsonVariantConst src) {
71
0
    return JsonVariantConst(getData(src), getResourceManager(src));
72
0
  }
73
74
0
  static bool checkJson(JsonVariantConst src) {
75
0
    auto data = getData(src);
76
0
    return !!data;
77
0
  }
78
};
79
80
ARDUINOJSON_END_PUBLIC_NAMESPACE