summaryrefslogtreecommitdiff
path: root/vendor/miette/src/handlers/debug.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/miette/src/handlers/debug.rs')
-rw-r--r--vendor/miette/src/handlers/debug.rs71
1 files changed, 71 insertions, 0 deletions
diff --git a/vendor/miette/src/handlers/debug.rs b/vendor/miette/src/handlers/debug.rs
new file mode 100644
index 0000000..50450a4
--- /dev/null
+++ b/vendor/miette/src/handlers/debug.rs
@@ -0,0 +1,71 @@
+use std::fmt;
+
+use crate::{protocol::Diagnostic, ReportHandler};
+
+/**
+[`ReportHandler`] that renders plain text and avoids extraneous graphics.
+It's optimized for screen readers and braille users, but is also used in any
+non-graphical environments, such as non-TTY output.
+*/
+#[derive(Debug, Clone)]
+pub struct DebugReportHandler;
+
+impl DebugReportHandler {
+ /// Create a new [`NarratableReportHandler`](crate::NarratableReportHandler)
+ /// There are no customization options.
+ pub const fn new() -> Self {
+ Self
+ }
+}
+
+impl Default for DebugReportHandler {
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
+impl DebugReportHandler {
+ /// Render a [`Diagnostic`]. This function is mostly internal and meant to
+ /// be called by the toplevel [`ReportHandler`] handler, but is made public
+ /// to make it easier (possible) to test in isolation from global state.
+ pub fn render_report(
+ &self,
+ f: &mut fmt::Formatter<'_>,
+ diagnostic: &(dyn Diagnostic),
+ ) -> fmt::Result {
+ let mut diag = f.debug_struct("Diagnostic");
+ diag.field("message", &format!("{}", diagnostic));
+ if let Some(code) = diagnostic.code() {
+ diag.field("code", &code.to_string());
+ }
+ if let Some(severity) = diagnostic.severity() {
+ diag.field("severity", &format!("{:?}", severity));
+ }
+ if let Some(url) = diagnostic.url() {
+ diag.field("url", &url.to_string());
+ }
+ if let Some(help) = diagnostic.help() {
+ diag.field("help", &help.to_string());
+ }
+ if let Some(labels) = diagnostic.labels() {
+ let labels: Vec<_> = labels.collect();
+ diag.field("labels", &format!("{:?}", labels));
+ }
+ if let Some(cause) = diagnostic.diagnostic_source() {
+ diag.field("caused by", &format!("{:?}", cause));
+ }
+ diag.finish()?;
+ writeln!(f)?;
+ writeln!(f, "NOTE: If you're looking for the fancy error reports, install miette with the `fancy` feature, or write your own and hook it up with miette::set_hook().")
+ }
+}
+
+impl ReportHandler for DebugReportHandler {
+ fn debug(&self, diagnostic: &(dyn Diagnostic), f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ if f.alternate() {
+ return fmt::Debug::fmt(diagnostic, f);
+ }
+
+ self.render_report(f, diagnostic)
+ }
+}