//! This module defines the following.
//! - The `ErrCode` type.
//! - A constant for every error code, with a name like `E0123`.
//! - A static table `DIAGNOSTICS` pairing every error code constant with its
//!   long description text.

use std::fmt;

rustc_index::newtype_index! {
    #[max = 9999] // Because all error codes have four digits.
    #[orderable]
    #[encodable]
    #[debug_format = "ErrCode({})"]
    pub struct ErrCode {}
}

impl fmt::Display for ErrCode {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "E{:04}", self.as_u32())
    }
}

macro_rules! define_error_code_constants_and_diagnostics_table {
    ($($name:ident: $num:literal,)*) => (
        $(
            pub const $name: $crate::ErrCode = $crate::ErrCode::from_u32($num);
        )*
        pub static DIAGNOSTICS: &[($crate::ErrCode, &str)] = &[
            $( (
                $name,
                include_str!(
                    concat!("../../rustc_error_codes/src/error_codes/", stringify!($name), ".md")
                )
            ), )*
        ];
    )
}

rustc_error_codes::error_codes!(define_error_code_constants_and_diagnostics_table);
