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.source§fn diagnostic_source(&self) -> Option<&dyn Diagnostic>
fn diagnostic_source(&self) -> Option<&dyn Diagnostic>
source§impl Display for MietteDiagnostic
impl Display for MietteDiagnostic
source§impl Error for MietteDiagnostic
impl Error for MietteDiagnostic
1.30.0 · source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · source§fn description(&self) -> &str
fn description(&self) -> &str
source§impl PartialEq for MietteDiagnostic
impl PartialEq for MietteDiagnostic
impl Eq for MietteDiagnostic
impl StructuralPartialEq for MietteDiagnostic
Auto Trait Implementations§
impl Freeze for MietteDiagnostic
impl RefUnwindSafe for MietteDiagnostic
impl Send for MietteDiagnostic
impl Sync for MietteDiagnostic
impl Unpin for MietteDiagnostic
impl UnwindSafe for MietteDiagnostic
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)