| use std::borrow::Cow; |
| use std::fmt::{self, Display}; |
| |
| use rustc_errors::IntoDiagArg; |
| use rustc_macros::{Decodable, Encodable, HashStable_Generic, current_rustc_version}; |
| |
| #[derive(Encodable, Decodable, Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] |
| #[derive(HashStable_Generic)] |
| pub struct RustcVersion { |
| pub major: u16, |
| pub minor: u16, |
| pub patch: u16, |
| } |
| |
| impl RustcVersion { |
| pub const CURRENT: Self = current_rustc_version!(); |
| } |
| |
| impl Display for RustcVersion { |
| fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { |
| write!(formatter, "{}.{}.{}", self.major, self.minor, self.patch) |
| } |
| } |
| |
| impl IntoDiagArg for RustcVersion { |
| fn into_diag_arg(self) -> rustc_errors::DiagArgValue { |
| rustc_errors::DiagArgValue::Str(Cow::Owned(self.to_string())) |
| } |
| } |