@@ -17,6 +17,27 @@ namespace api_common = opentelemetry::common;
1717
1818const int kAttributeValueSize = 16 ;
1919
20+ //
21+ // Iterator which convers "nostd::string_view *" to "std::string_view *".
22+ // This is needed to pass a span of "nostd::string_view" to EventBuilder::AddStringRange.
23+ //
24+ struct StringViewIterator
25+ {
26+ const nostd::string_view *m_ptr;
27+ explicit StringViewIterator (const nostd::string_view *ptr) noexcept : m_ptr(ptr) {}
28+ bool operator ==(StringViewIterator other) const noexcept { return m_ptr == other.m_ptr ; }
29+ bool operator !=(StringViewIterator other) const noexcept { return m_ptr != other.m_ptr ; }
30+ const std::string_view operator *() const noexcept
31+ {
32+ return std::string_view (m_ptr->data (), m_ptr->size ());
33+ }
34+ StringViewIterator &operator ++() noexcept
35+ {
36+ m_ptr += 1 ;
37+ return *this ;
38+ }
39+ };
40+
2041void PopulateAttribute (nostd::string_view key,
2142 const api_common::AttributeValue &value,
2243 ehd::EventBuilder &event_builder) noexcept
@@ -26,17 +47,19 @@ void PopulateAttribute(nostd::string_view key,
2647
2748 const char *key_name = key.data ();
2849
50+ // TODO: implement this with a visitor
51+
2952 if (nostd::holds_alternative<bool >(value))
3053 {
31- event_builder.AddValue (key_name, nostd::get<bool >(value), event_field_format_default );
54+ event_builder.AddValue (key_name, nostd::get<bool >(value), event_field_format_boolean );
3255 }
3356 else if (nostd::holds_alternative<int >(value))
3457 {
35- event_builder.AddValue (key_name, nostd::get<int >(value), event_field_format_default );
58+ event_builder.AddValue (key_name, nostd::get<int >(value), event_field_format_signed_int );
3659 }
3760 else if (nostd::holds_alternative<int64_t >(value))
3861 {
39- event_builder.AddValue (key_name, nostd::get<int64_t >(value), event_field_format_default );
62+ event_builder.AddValue (key_name, nostd::get<int64_t >(value), event_field_format_signed_int );
4063 }
4164 else if (nostd::holds_alternative<unsigned int >(value))
4265 {
@@ -48,7 +71,7 @@ void PopulateAttribute(nostd::string_view key,
4871 }
4972 else if (nostd::holds_alternative<double >(value), event_field_format_default)
5073 {
51- event_builder.AddValue (key_name, nostd::get<double >(value), event_field_format_default );
74+ event_builder.AddValue (key_name, nostd::get<double >(value), event_field_format_float );
5275 }
5376 else if (nostd::holds_alternative<const char *>(value))
5477 {
@@ -62,22 +85,53 @@ void PopulateAttribute(nostd::string_view key,
6285 }
6386 else if (nostd::holds_alternative<nostd::span<const uint8_t >>(value))
6487 {
65- // TODO: implement
88+ auto value_span = nostd::get<nostd::span<const uint8_t >>(value);
89+ event_builder.AddValueRange (key_name, value_span.begin (), value_span.end (),
90+ event_field_format_default);
6691 }
6792 else if (nostd::holds_alternative<nostd::span<const int >>(value))
68- {}
93+ {
94+ auto value_span = nostd::get<nostd::span<const int >>(value);
95+ event_builder.AddValueRange (key_name, value_span.begin (), value_span.end (),
96+ event_field_format_signed_int);
97+ }
6998 else if (nostd::holds_alternative<nostd::span<const int64_t >>(value))
70- {}
99+ {
100+ auto value_span = nostd::get<nostd::span<const int64_t >>(value);
101+ event_builder.AddValueRange (key_name, value_span.begin (), value_span.end (),
102+ event_field_format_signed_int);
103+ }
71104 else if (nostd::holds_alternative<nostd::span<const unsigned int >>(value))
72- {}
105+ {
106+ auto value_span = nostd::get<nostd::span<const unsigned int >>(value);
107+ event_builder.AddValueRange (key_name, value_span.begin (), value_span.end (),
108+ event_field_format_default);
109+ }
73110 else if (nostd::holds_alternative<nostd::span<const uint64_t >>(value))
74- {}
111+ {
112+ auto value_span = nostd::get<nostd::span<const unsigned int >>(value);
113+ event_builder.AddValueRange (key_name, value_span.begin (), value_span.end (),
114+ event_field_format_default);
115+ }
75116 else if (nostd::holds_alternative<nostd::span<const double >>(value))
76- {}
117+ {
118+ auto value_span = nostd::get<nostd::span<const double >>(value);
119+ event_builder.AddValueRange (key_name, value_span.begin (), value_span.end (),
120+ event_field_format_float);
121+ }
77122 else if (nostd::holds_alternative<nostd::span<const bool >>(value))
78- {}
123+ {
124+ auto value_span = nostd::get<nostd::span<const bool >>(value);
125+ event_builder.AddValueRange (key_name, value_span.begin (), value_span.end (),
126+ event_field_format_boolean);
127+ }
79128 else if (nostd::holds_alternative<nostd::span<const nostd::string_view>>(value))
80- {}
129+ {
130+ auto value_span = nostd::get<nostd::span<const nostd::string_view>>(value);
131+ event_builder.AddStringRange <char >(key_name, StringViewIterator (value_span.data ()),
132+ StringViewIterator (value_span.data () + value_span.size ()),
133+ event_field_format_default);
134+ }
81135}
82136
83137} // namespace utils
0 commit comments