commercetools / commercetools/sphere-scala-libs

propose alternative derivation mechanism

Open
#174 3 comments 1 reaction 0 assignees View on GitHub
Dominant language
Scala
Stars
22
Forks
7
Avg merge
18h 43m
Merged PRs (30d)
20

Description

in sphere-json & sphere-mongo we propose a generic derivation of typeclass instances based on scala macros & core generation.

I experimented using another derivation mechanism based on [magnolia](https://github.com/propensive/magnolia): https://github.com/sphereio/sphere-scala-libs/tree/derive_with_magnolia

I could use this new mechanism for sphere-mongo in our private backend.

Using magnolia instead of our own macros is a trade-of decisions:
(+) we can mutualize our efforts with other contributors to have a better derivation mechanism
(+) Magnolia advertises having good compilation time
(+) we could only rely on scala annotations and fix https://github.com/sphereio/sphere-scala-libs/issues/131
(+) less code in this repository
(-) depending on magnolia
(-) less liberty

I personally think that this way is worth a try.
But I'd like to avoid a big-bang release where we move completely from our macros to magnolia.

My proposal:
- phase 1: split out the current libraries to extract the current derivation
- phase 2: add magnolia as a possible alternative. The 2 derivations mechanisms coexist. It means that we have to duplicate the tests. But this allow to quickly switch which mechanism we want to use
- phase 3: depending on the results of phase 2, we could keep only magnolia

For the transition, we have 2 possibilities. For example if someone is using `sphere-mongo`:
- 1st possibility: `sphere-mongo` can be a library depending on `sphere-mongo-core` & `sphere-mongo-macro-derivation`.
- This change should be transparent for the user.
- Users have to switch to `sphere-mongo-core` & `sphere-mongo-magnolia` to test in the phase 2.
- 2nd possibility: we extract the derivation from `sphere-mongo` into `sphere-mongo-macro-derivation`.
- We don't need any `sphere-mongo-core`.
- Current users have to add this dependency if they rely on the derivation feature.
- Users are then aware that we will propose `sphere-mongo-magnolia` in the phase 2 as an alternative to `sphere-mongo-macro-derivation`.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reviewing the existing derivation implementations for sphere-json and sphere-mongo, then inspect the derive_with_magnolia branch linked in the issue. Compare the current macro and core-generation structure with the proposed Magnolia approach. Done would require agreeing on the extraction and coexistence design before implementation.

Written by the indexing model from the issue text.

Assessment

Tech stack
scala
Domain
backend
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.