mirror of
https://github.com/ocaml-tracing/ocaml-opentelemetry.git
synced 2026-03-09 12:23:32 -04:00
56 lines
1.6 KiB
OCaml
56 lines
1.6 KiB
OCaml
[@@@ocaml.warning "-27-30-39"]
|
|
|
|
type status_mutable = {
|
|
mutable code : int32;
|
|
mutable message : bytes;
|
|
mutable details : bytes list;
|
|
}
|
|
|
|
let default_status_mutable () : status_mutable = {
|
|
code = 0l;
|
|
message = Bytes.create 0;
|
|
details = [];
|
|
}
|
|
|
|
|
|
let rec decode_status d =
|
|
let v = default_status_mutable () in
|
|
let continue__= ref true in
|
|
while !continue__ do
|
|
match Pbrt.Decoder.key d with
|
|
| None -> (
|
|
v.details <- List.rev v.details;
|
|
); continue__ := false
|
|
| Some (1, Pbrt.Varint) -> begin
|
|
v.code <- Pbrt.Decoder.int32_as_varint d;
|
|
end
|
|
| Some (1, pk) ->
|
|
Pbrt.Decoder.unexpected_payload "Message(status), field(1)" pk
|
|
| Some (2, Pbrt.Bytes) -> begin
|
|
v.message <- Pbrt.Decoder.bytes d;
|
|
end
|
|
| Some (2, pk) ->
|
|
Pbrt.Decoder.unexpected_payload "Message(status), field(2)" pk
|
|
| Some (3, Pbrt.Bytes) -> begin
|
|
v.details <- (Pbrt.Decoder.bytes d) :: v.details;
|
|
end
|
|
| Some (3, pk) ->
|
|
Pbrt.Decoder.unexpected_payload "Message(status), field(3)" pk
|
|
| Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind
|
|
done;
|
|
({
|
|
Status_types.code = v.code;
|
|
Status_types.message = v.message;
|
|
Status_types.details = v.details;
|
|
} : Status_types.status)
|
|
|
|
let rec encode_status (v:Status_types.status) encoder =
|
|
Pbrt.Encoder.key (1, Pbrt.Varint) encoder;
|
|
Pbrt.Encoder.int32_as_varint v.Status_types.code encoder;
|
|
Pbrt.Encoder.key (2, Pbrt.Bytes) encoder;
|
|
Pbrt.Encoder.bytes v.Status_types.message encoder;
|
|
List.iter (fun x ->
|
|
Pbrt.Encoder.key (3, Pbrt.Bytes) encoder;
|
|
Pbrt.Encoder.bytes x encoder;
|
|
) v.Status_types.details;
|
|
()
|