Use JSON enum to help with type inference

This branch is suppose to speed up compile time by using an `enum` to describe the JSON.