pub struct MietteDiagnostic {
pub message: String,
pub code: Option<String>,
pub severity: Option<Severity>,
pub help: Option<String>,
pub url: Option<String>,
pub labels: Option<Vec<LabeledSpan>>,
}
Expand description
Diagnostic that can be created at runtime.
Fields§
§message: String
Displayed diagnostic message
code: Option<String>
Unique diagnostic code to look up more information
about this Diagnostic. Ideally also globally unique, and documented
in the toplevel crate’s documentation for easy searching.
Rust path format (foo::bar::baz
) is recommended, but more classic
codes like E0123
will work just fine
severity: Option<Severity>
Diagnostic
severity. Intended to be used by
ReportHandler
s to change the way different
Diagnostic
s are displayed. Defaults to Severity::Error
help: Option<String>
Additional help text related to this Diagnostic
url: Option<String>
URL to visit for a more detailed explanation/help about this
Diagnostic
.
labels: Option<Vec<LabeledSpan>>
Labels to apply to this Diagnostic
’s Diagnostic::source_code
Implementations§
Source§impl MietteDiagnostic
impl MietteDiagnostic
Sourcepub fn new(message: impl Into<String>) -> Self
pub fn new(message: impl Into<String>) -> Self
Create a new dynamic diagnostic with the given message.
§Examples
use miette::{Diagnostic, MietteDiagnostic, Severity};
let diag = MietteDiagnostic::new("Oops, something went wrong!");
assert_eq!(diag.to_string(), "Oops, something went wrong!");
assert_eq!(diag.message, "Oops, something went wrong!");
Sourcepub fn with_code(self, code: impl Into<String>) -> Self
pub fn with_code(self, code: impl Into<String>) -> Self
Return new diagnostic with the given code.
§Examples
use miette::{Diagnostic, MietteDiagnostic};
let diag = MietteDiagnostic::new("Oops, something went wrong!").with_code("foo::bar::baz");
assert_eq!(diag.message, "Oops, something went wrong!");
assert_eq!(diag.code, Some("foo::bar::baz".to_string()));
Sourcepub fn with_severity(self, severity: Severity) -> Self
pub fn with_severity(self, severity: Severity) -> Self
Return new diagnostic with the given severity.
§Examples
use miette::{Diagnostic, MietteDiagnostic, Severity};
let diag = MietteDiagnostic::new("I warn you to stop!").with_severity(Severity::Warning);
assert_eq!(diag.message, "I warn you to stop!");
assert_eq!(diag.severity, Some(Severity::Warning));
Sourcepub fn with_help(self, help: impl Into<String>) -> Self
pub fn with_help(self, help: impl Into<String>) -> Self
Return new diagnostic with the given help message.
§Examples
use miette::{Diagnostic, MietteDiagnostic};
let diag = MietteDiagnostic::new("PC is not working").with_help("Try to reboot it again");
assert_eq!(diag.message, "PC is not working");
assert_eq!(diag.help, Some("Try to reboot it again".to_string()));
Sourcepub fn with_url(self, url: impl Into<String>) -> Self
pub fn with_url(self, url: impl Into<String>) -> Self
Return new diagnostic with the given URL.
§Examples
use miette::{Diagnostic, MietteDiagnostic};
let diag = MietteDiagnostic::new("PC is not working")
.with_url("https://letmegooglethat.com/?q=Why+my+pc+doesn%27t+work");
assert_eq!(diag.message, "PC is not working");
assert_eq!(
diag.url,
Some("https://letmegooglethat.com/?q=Why+my+pc+doesn%27t+work".to_string())
);
Sourcepub fn with_label(self, label: impl Into<LabeledSpan>) -> Self
pub fn with_label(self, label: impl Into<LabeledSpan>) -> Self
Return new diagnostic with the given label.
Discards previous labels
§Examples
use miette::{Diagnostic, LabeledSpan, MietteDiagnostic};
let source = "cpp is the best language";
let label = LabeledSpan::at(0..3, "This should be Rust");
let diag = MietteDiagnostic::new("Wrong best language").with_label(label.clone());
assert_eq!(diag.message, "Wrong best language");
assert_eq!(diag.labels, Some(vec![label]));
Sourcepub fn with_labels(self, labels: impl IntoIterator<Item = LabeledSpan>) -> Self
pub fn with_labels(self, labels: impl IntoIterator<Item = LabeledSpan>) -> Self
Return new diagnostic with the given labels.
Discards previous labels
§Examples
use miette::{Diagnostic, LabeledSpan, MietteDiagnostic};
let source = "helo wrld";
let labels = vec![
LabeledSpan::at_offset(3, "add 'l'"),
LabeledSpan::at_offset(6, "add 'r'"),
];
let diag = MietteDiagnostic::new("Typos in 'hello world'").with_labels(labels.clone());
assert_eq!(diag.message, "Typos in 'hello world'");
assert_eq!(diag.labels, Some(labels));
Sourcepub fn and_label(self, label: impl Into<LabeledSpan>) -> Self
pub fn and_label(self, label: impl Into<LabeledSpan>) -> Self
Return new diagnostic with new label added to the existing ones.
§Examples
use miette::{Diagnostic, LabeledSpan, MietteDiagnostic};
let source = "helo wrld";
let label1 = LabeledSpan::at_offset(3, "add 'l'");
let label2 = LabeledSpan::at_offset(6, "add 'r'");
let diag = MietteDiagnostic::new("Typos in 'hello world'")
.and_label(label1.clone())
.and_label(label2.clone());
assert_eq!(diag.message, "Typos in 'hello world'");
assert_eq!(diag.labels, Some(vec![label1, label2]));
Sourcepub fn and_labels(self, labels: impl IntoIterator<Item = LabeledSpan>) -> Self
pub fn and_labels(self, labels: impl IntoIterator<Item = LabeledSpan>) -> Self
Return new diagnostic with new labels added to the existing ones.
§Examples
use miette::{Diagnostic, LabeledSpan, MietteDiagnostic};
let source = "helo wrld";
let label1 = LabeledSpan::at_offset(3, "add 'l'");
let label2 = LabeledSpan::at_offset(6, "add 'r'");
let label3 = LabeledSpan::at_offset(9, "add '!'");
let diag = MietteDiagnostic::new("Typos in 'hello world!'")
.and_label(label1.clone())
.and_labels([label2.clone(), label3.clone()]);
assert_eq!(diag.message, "Typos in 'hello world!'");
assert_eq!(diag.labels, Some(vec![label1, label2, label3]));
Trait Implementations§
Source§impl Clone for MietteDiagnostic
impl Clone for MietteDiagnostic
Source§fn clone(&self) -> MietteDiagnostic
fn clone(&self) -> MietteDiagnostic
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for MietteDiagnostic
impl Debug for MietteDiagnostic
Source§impl Diagnostic for MietteDiagnostic
impl Diagnostic for MietteDiagnostic
Source§fn code<'a>(&'a self) -> Option<Box<dyn Display + 'a>>
fn code<'a>(&'a self) -> Option<Box<dyn Display + 'a>>
Diagnostic
. Ideally also globally unique, and documented
in the toplevel crate’s documentation for easy searching. Rust path
format (foo::bar::baz
) is recommended, but more classic codes like
E0123
or enums will work just fine.Source§fn severity(&self) -> Option<Severity>
fn severity(&self) -> Option<Severity>
ReportHandler
s to change the display format
of this diagnostic. Read moreSource§fn help<'a>(&'a self) -> Option<Box<dyn Display + 'a>>
fn help<'a>(&'a self) -> Option<Box<dyn Display + 'a>>
Diagnostic
. Do you have any
advice for the poor soul who’s just run into this issue?Source§fn url<'a>(&'a self) -> Option<Box<dyn Display + 'a>>
fn url<'a>(&'a self) -> Option<Box<dyn Display + 'a>>
Diagnostic
.Source§fn labels(&self) -> Option<Box<dyn Iterator<Item = LabeledSpan> + '_>>
fn labels(&self) -> Option<Box<dyn Iterator<Item = LabeledSpan> + '_>>
Diagnostic
’s Diagnostic::source_code
Source§fn source_code(&self) -> Option<&dyn SourceCode>
fn source_code(&self) -> Option<&dyn SourceCode>
Diagnostic
’s Diagnostic::labels
to.Diagnostic
s.