diff options
| author | Jake Vossen <jake@vossen.dev> | 2020-02-28 15:32:09 -0700 |
|---|---|---|
| committer | Jake Vossen <jake@vossen.dev> | 2020-02-29 11:53:51 -0700 |
| commit | 5f3ffee6b77f073b78bdc76e7a0f4811bc39e7f9 (patch) | |
| tree | e5f1636fb10b7b570078b96b1d7e711e663f3776 /src/librustc_errors/registry.rs | |
| parent | e9bca510fe17354f876aa289bb39d347d7c69c69 (diff) | |
| download | rust-5f3ffee6b77f073b78bdc76e7a0f4811bc39e7f9.tar.gz rust-5f3ffee6b77f073b78bdc76e7a0f4811bc39e7f9.zip | |
added `try_find_description` to distinguish no desc from invalid code
Diffstat (limited to 'src/librustc_errors/registry.rs')
| -rw-r--r-- | src/librustc_errors/registry.rs | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/librustc_errors/registry.rs b/src/librustc_errors/registry.rs index 771542cb06f..c92a9d04775 100644 --- a/src/librustc_errors/registry.rs +++ b/src/librustc_errors/registry.rs @@ -1,16 +1,32 @@ use rustc_data_structures::fx::FxHashMap; +#[derive(Debug)] +pub struct InvalidErrorCode; + #[derive(Clone)] pub struct Registry { - descriptions: FxHashMap<&'static str, &'static str>, + long_descriptions: FxHashMap<&'static str, Option<&'static str>>, } impl Registry { - pub fn new(descriptions: &[(&'static str, &'static str)]) -> Registry { - Registry { descriptions: descriptions.iter().cloned().collect() } + pub fn new(long_descriptions: &[(&'static str, Option<&'static str>)]) -> Registry { + Registry { long_descriptions: long_descriptions.iter().cloned().collect() } } + /// This will panic if an invalid error code is passed in pub fn find_description(&self, code: &str) -> Option<&'static str> { - self.descriptions.get(code).cloned() + self.try_find_description(code).unwrap() + } + /// Returns `InvalidErrorCode` if the code requested does not exist in the + /// registry. Otherwise, returns an `Option` where `None` means the error + /// code is valid but has no extended information. + pub fn try_find_description( + &self, + code: &str, + ) -> Result<Option<&'static str>, InvalidErrorCode> { + if !self.long_descriptions.contains_key(code) { + return Err(InvalidErrorCode); + } + Ok(self.long_descriptions.get(code).unwrap().clone()) } } |
