pub type Route { Route(name: String, path: List(Segment), sub: List(Route)) }
Route(name: String, path: List(Segment), sub: List(Route))
pub type Segment { Lit(val: String) Str(name: String) Int(name: String) }
Lit(val: String)
Str(name: String)
Int(name: String)
pub fn main( definitions: List(Route), output_path: String, ) -> Result(Nil, String)