1use serde::{Deserialize, Serialize};
10use serde_bytes::ByteBuf;
11use tagged_serde::TaggedSerde;
12
13use crate::{NixString, Result};
14
15#[derive(Debug, TaggedSerde, PartialEq, Clone, Eq)]
23pub enum Msg {
24 #[tagged_serde = 0x64617416]
25 Write(NixString),
26 #[tagged_serde = 0x63787470]
27 Error(StderrError),
28 #[tagged_serde = 0x6f6c6d67]
29 Next(NixString),
30 #[tagged_serde = 0x53545254]
31 StartActivity(StderrStartActivity),
32 #[tagged_serde = 0x53544f50]
33 StopActivity(u64),
34 #[tagged_serde = 0x52534c54]
35 Result(StderrResult),
36 #[tagged_serde = 0x616c7473]
37 Last(()),
38}
39
40#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
41pub struct StderrError {
42 typ: ByteBuf,
43 level: u64,
44 name: ByteBuf,
45 message: ByteBuf,
46 have_pos: u64,
47 traces: Vec<Trace>,
48}
49
50#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
51pub struct StderrStartActivity {
52 act: u64,
53 lvl: u64,
54 typ: u64,
55 s: ByteBuf,
56 fields: LoggerFields,
57 parent: u64,
58}
59
60#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
61pub struct StderrResult {
62 act: u64,
63 typ: u64,
64 fields: LoggerFields,
65}
66
67#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
68struct Trace {
69 have_pos: u64,
70 trace: ByteBuf,
71}
72
73#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq)]
74struct LoggerFields {
75 fields: Vec<LoggerField>,
76}
77
78#[derive(Debug, TaggedSerde, Clone, PartialEq, Eq)]
79enum LoggerField {
80 #[tagged_serde = 0]
81 Int(u64),
82 #[tagged_serde = 1]
83 String(ByteBuf),
84}