ephemeris_report/
details.rs1use facet::Facet;
2
3use crate::Outcome;
4
5#[derive(Clone, Debug, Eq, Facet, PartialEq)]
7#[facet(tag = "kind", rename_all = "kebab-case")]
8#[repr(u8)]
9pub enum Details {
10 Tests {
12 summary: TestSummary,
14 items: Vec<TestItem>,
16 },
17 Diagnostics {
19 summary: DiagnosticSummary,
21 items: Vec<Diagnostic>,
23 },
24 Diff {
26 items: Vec<FileDiff>,
28 },
29}
30
31#[derive(Clone, Copy, Debug, Eq, Facet, PartialEq)]
33pub struct TestSummary {
34 pub passed: u64,
36 pub failed: u64,
38 pub skipped: u64,
40}
41
42#[derive(Clone, Debug, Eq, Facet, PartialEq)]
44pub struct TestItem {
45 pub name: String,
47 pub outcome: Outcome,
49 #[facet(default, skip_serializing_if = Option::is_none)]
51 pub message: Option<String>,
52}
53
54#[derive(Clone, Copy, Debug, Eq, Facet, PartialEq)]
56pub struct DiagnosticSummary {
57 pub errors: u64,
59 pub warnings: u64,
61}
62
63#[derive(Clone, Copy, Debug, Eq, Facet, PartialEq)]
65#[facet(rename_all = "lowercase")]
66#[repr(u8)]
67pub enum Level {
68 Error,
70 Warning,
72 Note,
74}
75
76#[derive(Clone, Debug, Eq, Facet, PartialEq)]
78pub struct Diagnostic {
79 pub level: Level,
81 pub message: String,
83 #[facet(default, skip_serializing_if = Option::is_none)]
85 pub file: Option<String>,
86 #[facet(default, skip_serializing_if = Option::is_none)]
88 pub line: Option<u64>,
89 #[facet(default, skip_serializing_if = Option::is_none)]
91 pub column: Option<u64>,
92 #[facet(default, skip_serializing_if = Option::is_none)]
94 pub code: Option<String>,
95}
96
97#[derive(Clone, Debug, Eq, Facet, PartialEq)]
99pub struct FileDiff {
100 pub file: String,
102 pub text: String,
104}