X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Flibrustc_errors%2Fregistry.rs;h=c92a9d04775d1e819179fe8472ce3a20794fc536;hb=5f3ffee6b77f073b78bdc76e7a0f4811bc39e7f9;hp=9a2302171bab3fe8fb222e22f875b15c6f9526f7;hpb=1dbc8b0d4bcdc404bdc2029b6a87972ec92707dc;p=rust.git diff --git a/src/librustc_errors/registry.rs b/src/librustc_errors/registry.rs index 9a2302171ba..c92a9d04775 100644 --- a/src/librustc_errors/registry.rs +++ b/src/librustc_errors/registry.rs @@ -1,26 +1,32 @@ -// Copyright 2014 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - 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, InvalidErrorCode> { + if !self.long_descriptions.contains_key(code) { + return Err(InvalidErrorCode); + } + Ok(self.long_descriptions.get(code).unwrap().clone()) } }