30namespace kcenon {
namespace monitoring {
namespace zipkin_proto {
43 upper.reserve(value.size());
44 for (
char c : value) {
45 if (c >=
'a' && c <=
'z') upper.push_back(
static_cast<char>(c -
'a' +
'A'));
46 else upper.push_back(c);
57 std::vector<std::uint8_t>
ipv4;
58 std::vector<std::uint8_t>
ipv6;
74 std::vector<std::uint8_t>
id;
82 std::vector<std::pair<std::string, std::string>>
tags;
96 std::vector<std::uint8_t> out;
105 std::vector<std::uint8_t> out;
121 const std::string& value) {
122 std::vector<std::uint8_t> out;
129 std::vector<std::uint8_t> out;
149 for (
const auto& [key, value] : s.
tags) {
159 std::vector<std::uint8_t> out;
160 for (
const auto& s : list.
spans) {
175 std::uint32_t field_number;
178 switch (field_number) {
194 if (!v)
return false;
195 out.
port =
static_cast<std::int32_t
>(*v);
209 std::uint32_t field_number;
212 switch (field_number) {
216 if (!v)
return false;
232 std::string& key, std::string& value) {
235 std::uint32_t field_number;
242 if (field_number == 1) {
244 }
else if (field_number == 2) {
247 const std::uint8_t* ptr; std::size_t len;
257 std::uint32_t field_number;
260 switch (field_number) {
276 if (!v)
return false;
287 if (!v)
return false;
294 if (!v)
return false;
300 const std::uint8_t* ptr; std::size_t len;
307 const std::uint8_t* ptr; std::size_t len;
314 const std::uint8_t* ptr; std::size_t len;
323 const std::uint8_t* ptr; std::size_t len;
325 std::string key, value;
327 out.
tags.emplace_back(std::move(key), std::move(value));
333 if (!v)
return false;
334 out.
debug = (*v != 0);
340 if (!v)
return false;
355 std::uint32_t field_number;
359 const std::uint8_t* ptr; std::size_t len;
363 out.
spans.push_back(std::move(s));
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.
void encode_fixed64_field(std::vector< std::uint8_t > &out, std::uint32_t field_number, std::uint64_t value)
Encode a fixed64 field.
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.
@ 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).
bool decode_span(const std::uint8_t *data, std::size_t size, span &out)
span_kind parse_kind(const std::string &value)
Convert a textual Zipkin kind (e.g. "CLIENT") to its enum value.
std::vector< std::uint8_t > encode_annotation(const annotation &ann)
bool decode_annotation(const std::uint8_t *data, std::size_t size, annotation &out)
bool decode_map_entry(const std::uint8_t *data, std::size_t size, std::string &key, std::string &value)
std::vector< std::uint8_t > encode_list_of_spans(const list_of_spans &list)
std::vector< std::uint8_t > encode_string_map_entry(const std::string &key, const std::string &value)
Encode a single entry of a map<string,string> field.
std::vector< std::uint8_t > encode_endpoint(const endpoint &ep)
std::vector< std::uint8_t > encode_span(const span &s)
bool decode_list_of_spans(const std::uint8_t *data, std::size_t size, list_of_spans &out)
bool decode_endpoint(const std::uint8_t *data, std::size_t size, endpoint &out)
Zero-dependency protobuf wire-format encoder and decoder primitives.
std::vector< std::uint8_t > ipv6
std::vector< std::uint8_t > ipv4
std::vector< span > spans
std::vector< std::uint8_t > trace_id
std::vector< std::uint8_t > id
std::vector< std::uint8_t > parent_id
std::vector< std::pair< std::string, std::string > > tags
std::vector< annotation > annotations