35namespace kcenon {
namespace monitoring {
namespace jaeger_proto {
57 std::vector<key_value>
tags;
76 std::vector<key_value>
tags;
94 std::vector<std::uint8_t> out;
101 std::int32_t nanos) {
102 std::vector<std::uint8_t> out;
109 std::vector<std::uint8_t> out;
120 static_assert(
sizeof(bits) ==
sizeof(kv.
v_float64),
121 "double must be 64 bits");
122 std::memcpy(&bits, &kv.
v_float64,
sizeof(bits));
131 std::vector<std::uint8_t> out;
133 for (
const auto& tag : p.
tags) {
141 std::vector<std::uint8_t> out;
149 std::vector<std::uint8_t> out;
166 for (
const auto& tag : s.
tags) {
178 std::vector<std::uint8_t> out;
179 for (
const auto& s : b.
spans) {
198 std::uint32_t field_number;
201 switch (field_number) {
209 if (!v)
return false;
220 if (!v)
return false;
227 if (!v)
return false;
228 out.
v_int64 =
static_cast<std::int64_t
>(*v);
234 if (!v)
return false;
235 std::uint64_t bits = *v;
254 std::uint32_t field_number;
257 switch (field_number) {
264 const std::uint8_t* ptr; std::size_t len;
268 out.
tags.push_back(std::move(kv));
279 std::int64_t& seconds, std::int32_t& nanos) {
281 seconds = 0; nanos = 0;
283 std::uint32_t field_number;
291 if (!v)
return false;
292 if (field_number == 1) seconds =
static_cast<std::int64_t
>(*v);
293 else if (field_number == 2) nanos =
static_cast<std::int32_t
>(*v);
302 std::uint32_t field_number;
305 switch (field_number) {
317 if (!v)
return false;
318 out.
ref_type =
static_cast<std::int32_t
>(*v);
328inline bool decode_span(
const std::uint8_t* data, std::size_t size,
332 std::uint32_t field_number;
335 switch (field_number) {
350 const std::uint8_t* ptr; std::size_t len;
360 if (!v)
return false;
361 out.
flags =
static_cast<std::uint32_t
>(*v);
366 const std::uint8_t* ptr; std::size_t len;
376 const std::uint8_t* ptr; std::size_t len;
386 const std::uint8_t* ptr; std::size_t len;
390 out.
tags.push_back(std::move(kv));
395 const std::uint8_t* ptr; std::size_t len;
411 std::uint32_t field_number;
414 switch (field_number) {
417 const std::uint8_t* ptr; std::size_t len;
421 out.
spans.push_back(std::move(s));
426 const std::uint8_t* ptr; std::size_t len;
Minimal protobuf wire reader used for round-trip tests.
std::optional< std::uint64_t > read_fixed64()
bool read_string(std::string &out)
bool read_bytes(std::vector< std::uint8_t > &out)
std::optional< std::uint64_t > read_varint()
bool read_length_delimited(const std::uint8_t **out_ptr, std::size_t *out_len)
Read a length-delimited payload. Returns pointer into the underlying buffer and the length....
bool skip_field(wire_type wt)
Skip a field whose wire type is given.
std::vector< std::uint8_t > encode_process(const process &p)
std::vector< std::uint8_t > encode_duration(std::int64_t seconds, std::int32_t nanos)
bool decode_span(const std::uint8_t *data, std::size_t size, span &out)
std::vector< std::uint8_t > encode_batch(const batch &b)
std::vector< std::uint8_t > encode_span(const span &s)
std::vector< std::uint8_t > encode_timestamp(std::int64_t seconds, std::int32_t nanos)
bool decode_batch(const std::uint8_t *data, std::size_t size, batch &out)
bool decode_key_value(const std::uint8_t *data, std::size_t size, key_value &out)
std::vector< std::uint8_t > encode_key_value(const key_value &kv)
bool decode_span_ref(const std::uint8_t *data, std::size_t size, span_ref &out)
std::vector< std::uint8_t > encode_span_ref(const span_ref &ref)
bool decode_timestamp(const std::uint8_t *data, std::size_t size, std::int64_t &seconds, std::int32_t &nanos)
bool decode_process(const std::uint8_t *data, std::size_t size, process &out)
void encode_string_field(std::vector< std::uint8_t > &out, std::uint32_t field_number, const std::string &value)
Encode a string field.
void encode_bool_field(std::vector< std::uint8_t > &out, std::uint32_t field_number, bool value)
Encode a bool field (proto3 skips false).
bool decode_tag(reader &r, std::uint32_t &field_number, wire_type &wt)
Decode a tag into (field_number, wire_type).
void encode_uint64_field(std::vector< std::uint8_t > &out, std::uint32_t field_number, std::uint64_t value)
Encode a uint32 / uint64 / int64 varint field (skips zero).
void encode_enum_field(std::vector< std::uint8_t > &out, std::uint32_t field_number, std::int32_t value)
Encode an enum field (always written when nonzero).
void encode_bytes_field(std::vector< std::uint8_t > &out, std::uint32_t field_number, const std::vector< std::uint8_t > &value)
Encode a bytes field.
void encode_message_field(std::vector< std::uint8_t > &out, std::uint32_t field_number, const std::vector< std::uint8_t > &serialized)
Encode an embedded message field given its pre-serialized bytes.
void encode_tag(std::vector< std::uint8_t > &out, std::uint32_t field_number, wire_type wt)
Encode a tag (field_number << 3 | wire_type) as a varint.
void encode_varint(std::vector< std::uint8_t > &out, std::uint64_t value)
Encode an unsigned varint into the buffer.
@ varint
int32/int64/uint32/uint64/sint*/bool/enum
@ length_delimited
string/bytes/embedded messages/packed repeated
@ fixed64
fixed64/sfixed64/double
void encode_fixed64(std::vector< std::uint8_t > &out, std::uint64_t value)
Encode a fixed64 little-endian value (used for Zipkin timestamps).
Zero-dependency protobuf wire-format encoder and decoder primitives.
std::vector< span > spans
std::vector< std::uint8_t > v_binary
std::vector< key_value > tags
std::vector< std::uint8_t > trace_id
std::vector< std::uint8_t > span_id
std::vector< key_value > tags
std::vector< span_ref > references
std::int64_t duration_seconds
std::vector< std::uint8_t > trace_id
std::vector< std::uint8_t > span_id
std::int64_t start_time_seconds
std::string operation_name
std::int32_t duration_nanos
std::int32_t start_time_nanos