Add a codegen error type to avoid unwraps
diff --git a/codegen/src/parse.rs b/codegen/src/parse.rs
index c6335b7..ba4bc5d 100644
--- a/codegen/src/parse.rs
+++ b/codegen/src/parse.rs
@@ -1,3 +1,4 @@
+use crate::error::Result;
use crate::version;
use indexmap::IndexMap;
@@ -21,13 +22,13 @@
type TokenLookup = BTreeMap<String, String>;
/// Parse the contents of `src` and return a list of AST types.
-pub fn parse() -> types::Definitions {
+pub fn parse() -> Result<types::Definitions> {
let mut item_lookup = BTreeMap::new();
- load_file(SYN_CRATE_ROOT, &[], &mut item_lookup).unwrap();
+ load_file(SYN_CRATE_ROOT, &[], &mut item_lookup)?;
- let token_lookup = load_token_file(TOKEN_SRC).unwrap();
+ let token_lookup = load_token_file(TOKEN_SRC)?;
- let version = version::get();
+ let version = version::get()?;
let types = item_lookup
.values()
@@ -39,11 +40,11 @@
.map(|(name, ty)| (ty, name))
.collect();
- types::Definitions {
+ Ok(types::Definitions {
version,
types,
tokens,
- }
+ })
}
/// Data extracted from syn source
@@ -501,15 +502,13 @@
ret
}
-type Error = Box<::std::error::Error>;
-
fn load_file<P: AsRef<Path>>(
name: P,
features: &[syn::Attribute],
lookup: &mut ItemLookup,
-) -> Result<(), Error> {
+) -> Result<()> {
let name = name.as_ref();
- let parent = name.parent().ok_or("no parent path")?;
+ let parent = name.parent().expect("no parent path");
let mut f = File::open(name)?;
let mut src = String::new();
@@ -602,7 +601,7 @@
Ok(())
}
-fn load_token_file<P: AsRef<Path>>(name: P) -> Result<TokenLookup, Error> {
+fn load_token_file<P: AsRef<Path>>(name: P) -> Result<TokenLookup> {
let name = name.as_ref();
let mut f = File::open(name)?;
let mut src = String::new();
@@ -623,5 +622,5 @@
}
}
- Err("failed to parse Token macro".into())
+ panic!("failed to parse Token macro")
}