text: Title: Refactor type templates to use a schema
  Body: # Problem
  
  - Jinja2 templates do not have any form of static type checking, this means there could be holes in our templates that we haven't discovered yet, leading to bugs.
  
  - Implementing a design for the types schema could also help Prisma improve the DMMF to be more client-agnostic.
  
  - The implementation in `src/prisma/generator/models.py` is very tightly coupled to our `types.py.jinja` template, any changes in the template must also be reflected in our DMMF parser, this is very fragile and could lead to bugs being introduced due to duplicated and then mismatched logic.
  
  ## Suggested solution
  
  We should design and use a schema for rendering types, similar to how Prisma does it for their TypeScript client.
  
  This schema would be similarly structured to our DMMF schema, however I am undecided on whether or not we should work from the schema that Prisma sends us or build from the ground up.
  