Skip to main content

use_diagnostic/
lib.rs

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}