Here are the data structures with brief descriptions:
| xtr::Context | Represents an X-Trace context, which carries information about the current task and the most recent preceding event in a thread |
| xtr::Event | Represents an X-Trace Event, with enough information to generate an X-Trace report |
| xtr::EventEdge | Represents an edge in an X-Trace graph, i.e., a causal relationship between two events |
| xtr::Id< max_len > | Represents an id as an array of bytes with a maximum length |
| xtr::Metadata | Represents an X-Trace metadata |
| xtr::OpId | Represents the id of an event, which should be unique within a single task |
| xtr::Option | Represents an X-Trace metadata option |
| xtr::OptionAny | This class can represent any option, and is used when we don't have a specific class for an option |
| xtr::OptionChainId | A ChainId X-Trace metadata option |
| xtr::OptionNop | A No-op option for X-Trace, serialized to a single '0' byte |
| xtr::Options | Represents the list of options in the X-Trace metadata |
| xtr::OptionSeverity | A Severity X-Trace metadata option |
| xtr::Reporter | |
| xtr::TaskId | Represents the id of an X-Trace task |