zth / rescript-relay

Use Relay with ReScript.
https://rescript-relay-documentation.vercel.app/docs/getting-started
337 stars 50 forks source link

[RFC] Enums as regular variants #443

Closed zth closed 1 year ago

zth commented 1 year ago

This is a RFC for a feature we could put in a new major of RescriptRelay. Think of it as a "RescriptRelay 2.0", where we have more wiggle room to introduce breaking changes.

With ReScript v11 allowing to customize the runtime representation of regular variants, we'll have opportunity to move enums from polymorphic variants to regular variants zero-cost.

What as previously:

type enum_OnlineStatus = private [ #Online | #Offline | #idle]

Would now be:

@unboxed type enum_OnlineStatus = Online | Offline | @as("idle") Idle | FutureAddedValue(string)

Pro's:

Con's:

As for migration, we'll need to figure out a good way to allow easy migration from the old to the new representation. This is of course a top priority and while publishing this under a new major RescriptRelay 2.0, I'd never just push out stuff without having a clear idea of how to migrate to it as easily as possible.

What are your thoughts on the above?

If there's anything unclear in the points I make, please feel free to ask and I'll clarify.