1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4pub use use_diagnostic_code as code;
5pub use use_diagnostic_label as label;
6pub use use_diagnostic_level as level;
7pub use use_diagnostic_message as message;
8pub use use_diagnostic_report as report;
9pub use use_diagnostic_span as span;
10
11pub use use_diagnostic_code::{DiagnosticCode, DiagnosticCodeError};
12pub use use_diagnostic_label::{DiagnosticLabel, DiagnosticLabelKind};
13pub use use_diagnostic_level::{DiagnosticLevel, DiagnosticLevelParseError};
14pub use use_diagnostic_message::{DiagnosticMessage, DiagnosticNote, DiagnosticTextError};
15pub use use_diagnostic_report::{Diagnostic, DiagnosticReport};
16pub use use_diagnostic_span::{
17 DiagnosticPosition, DiagnosticPositionError, DiagnosticSourceId, DiagnosticSourceIdError,
18 DiagnosticSpan, DiagnosticSpanError,
19};
20
21pub mod prelude;
22
23#[cfg(test)]
24mod tests {
25 use super::prelude::{
26 Diagnostic, DiagnosticCode, DiagnosticLabel, DiagnosticLevel, DiagnosticMessage,
27 DiagnosticPosition, DiagnosticReport, DiagnosticSpan,
28 };
29
30 #[test]
31 fn facade_prelude_composes_diagnostic_primitives() {
32 let code = DiagnosticCode::new("VALIDATE_MISSING_FIELD").expect("code should be valid");
33 let message =
34 DiagnosticMessage::new("missing required field").expect("message should be valid");
35 let start = DiagnosticPosition::new(3, 5).expect("position should be valid");
36 let end = DiagnosticPosition::new(3, 12).expect("position should be valid");
37 let span = DiagnosticSpan::without_source(start, end).expect("span should be valid");
38 let label = DiagnosticLabel::primary(
39 DiagnosticMessage::new("field is required here").expect("message should be valid"),
40 span,
41 );
42 let diagnostic = Diagnostic::new(DiagnosticLevel::Error, message)
43 .with_code(code)
44 .with_label(label);
45 let mut report = DiagnosticReport::new();
46
47 report.add(diagnostic);
48
49 assert_eq!(report.len(), 1);
50 assert!(report.has_errors());
51 assert_eq!(report.highest_severity(), Some(DiagnosticLevel::Error));
52 }
53}