cornucopia icon indicating copy to clipboard operation
cornucopia copied to clipboard

New codegen architecture

Open Virgiel opened this issue 2 years ago • 6 comments

A new codegen architecture generating a whole crate instead of a single file #186.

Changes

  • Generate a full crate instead of a file
  • Inline clients code
  • Minimum amount of dependencies
  • Most features are now automatically enabled, only deadpool remain
  • Split the gigantic generated code file into modules
  • No longer generate a named module for postgres public implicit schema
  • Improve codegen

Current problems

  • Cargo cannot have multiple package with the same name and doesn't support nested package. Therefore, I had to use a different name for each generated crate.
  • We generate way more code than before, and codegen diff are getting out of control

Remaining improvements

  • Test for types in a schema
  • Update documentation, examples, website, etc

Deferred to future PR

  • Use cargo-px instead of build.rs for the auto-build example. Recommend this it by default instead of the cli ?
  • We have the opportunity to change how we handle certain types, in particular times #209 and decimals #204. We could provide options, for example for times, you could choose between : std for SystemTime, time or chrono.

Virgiel avatar May 08 '23 16:05 Virgiel

@LouisGariepy Although it is not completely ready for a merge, the core logic is already there and works. This is already a huge PR in itself, so I deferred some of the work for later. I didn't add any new features or made any logical changes to the generated code.

Virgiel avatar May 13 '23 20:05 Virgiel

@Virgiel Thanks for the awesome work! I'm reviewing the code as I'm writing this. Might take a bit since there's a lot to look at, but what I have seen so far is promising.

LouisGariepy avatar May 16 '23 23:05 LouisGariepy

Oh I just realized this was still a draft :sweat_smile:

LouisGariepy avatar May 17 '23 20:05 LouisGariepy

I still need to add some error handling, but the new architecture is ready for review !

Virgiel avatar May 22 '23 19:05 Virgiel

I've been using this PR in productions for a few weeks and it works very well !

Virgiel avatar Nov 07 '23 08:11 Virgiel

A final pain point is that we generate too much code and it makes the PRs hard to read, I suggest putting the examples and reference codegen in gitignore and relying on cargo px to generate them on demand. We will continue to check that the codegen works and that the examples run.

Virgiel avatar Nov 07 '23 08:11 Virgiel