| //! Errors emitted by symbol_mangling. | 
 |  | 
 | use std::fmt; | 
 |  | 
 | use rustc_errors::{Diag, DiagCtxtHandle, Diagnostic, EmissionGuarantee, Level}; | 
 | use rustc_span::Span; | 
 |  | 
 | pub struct TestOutput { | 
 |     pub span: Span, | 
 |     pub kind: Kind, | 
 |     pub content: String, | 
 | } | 
 |  | 
 | // This diagnostic doesn't need translation because (a) it doesn't contain any | 
 | // natural language, and (b) it's only used in tests. So we construct it | 
 | // manually and avoid the fluent machinery. | 
 | impl<G: EmissionGuarantee> Diagnostic<'_, G> for TestOutput { | 
 |     fn into_diag(self, dcx: DiagCtxtHandle<'_>, level: Level) -> Diag<'_, G> { | 
 |         let TestOutput { span, kind, content } = self; | 
 |  | 
 |         #[allow(rustc::untranslatable_diagnostic)] | 
 |         Diag::new(dcx, level, format!("{kind}({content})")).with_span(span) | 
 |     } | 
 | } | 
 |  | 
 | pub enum Kind { | 
 |     SymbolName, | 
 |     Demangling, | 
 |     DemanglingAlt, | 
 |     DefPath, | 
 | } | 
 |  | 
 | impl fmt::Display for Kind { | 
 |     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | 
 |         match self { | 
 |             Kind::SymbolName => write!(f, "symbol-name"), | 
 |             Kind::Demangling => write!(f, "demangling"), | 
 |             Kind::DemanglingAlt => write!(f, "demangling-alt"), | 
 |             Kind::DefPath => write!(f, "def-path"), | 
 |         } | 
 |     } | 
 | } |