Add a codegen error type to avoid unwraps
diff --git a/codegen/src/main.rs b/codegen/src/main.rs
index cc48ddd..3e27e1e 100644
--- a/codegen/src/main.rs
+++ b/codegen/src/main.rs
@@ -12,6 +12,7 @@
 #![recursion_limit = "128"]
 #![allow(clippy::needless_pass_by_value)]
 
+mod error;
 mod file;
 mod fold;
 mod full;
@@ -23,10 +24,21 @@
 mod visit;
 mod visit_mut;
 
+use crate::error::Result;
+use std::process;
+
 fn main() {
-    let defs = parse::parse();
-    json::generate(&defs);
-    fold::generate(&defs);
-    visit::generate(&defs);
-    visit_mut::generate(&defs);
+    if let Err(err) = do_main() {
+        let _ = eprintln!("error: {}", err);
+        process::exit(1);
+    }
+}
+
+fn do_main() -> Result<()> {
+    let defs = parse::parse()?;
+    json::generate(&defs)?;
+    fold::generate(&defs)?;
+    visit::generate(&defs)?;
+    visit_mut::generate(&defs)?;
+    Ok(())
 }