Make type information accessible through OutFile
diff --git a/gen/src/out.rs b/gen/src/out.rs
index 8a6bd86..94a54e4 100644
--- a/gen/src/out.rs
+++ b/gen/src/out.rs
@@ -1,9 +1,11 @@
 use crate::gen::include::Includes;
+use crate::syntax::Types;
 use std::cell::RefCell;
 use std::fmt::{self, Arguments, Write};
 
-pub(crate) struct OutFile {
+pub(crate) struct OutFile<'a> {
     pub header: bool,
+    pub types: &'a Types<'a>,
     pub include: Includes,
     pub front: Content,
     content: RefCell<Content>,
@@ -15,10 +17,11 @@
     blocks_pending: Vec<&'static str>,
 }
 
-impl OutFile {
-    pub fn new(header: bool) -> Self {
+impl<'a> OutFile<'a> {
+    pub fn new(header: bool, types: &'a Types) -> Self {
         OutFile {
             header,
+            types,
             include: Includes::new(),
             front: Content::new(),
             content: RefCell::new(Content::new()),
diff --git a/gen/src/write.rs b/gen/src/write.rs
index b2d52bb..3be5e35 100644
--- a/gen/src/write.rs
+++ b/gen/src/write.rs
@@ -10,8 +10,8 @@
 use proc_macro2::Ident;
 use std::collections::HashMap;
 
-pub(super) fn gen(apis: &[Api], types: &Types, opt: &Opt, header: bool) -> OutFile {
-    let mut out_file = OutFile::new(header);
+pub(super) fn gen<'a>(apis: &[Api], types: &'a Types, opt: &Opt, header: bool) -> OutFile<'a> {
+    let mut out_file = OutFile::new(header, types);
     let out = &mut out_file;
 
     if header {