Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provide more user friendly way to derive codecs #25

Open
kpodsiad opened this issue Sep 6, 2022 · 1 comment
Open

Provide more user friendly way to derive codecs #25

kpodsiad opened this issue Sep 6, 2022 · 1 comment

Comments

@kpodsiad
Copy link
Collaborator

kpodsiad commented Sep 6, 2022

Annotation based configuration is super useful, but it might be hard to use in cases when one's datatypes are part of e.g. public API and are shared among few apps. Bringing circe, cats and friends into scope is almost impossible.

Of course one can use derived methods explicitly, but it's not as convenient as using circe's deriveConfiguredCodec and similar. Snippet included to issue doesn't use any configuration options but each one of them will require additional codes which is not easy to write as there are almost no comments in sources.

Reproduction uses scala-cli and locally published version of library.

//> using scala "3.2.0"
//> using lib "com.evolution::derivation-circe:0.1-fd8fba2a1f9529f0adc55912129fe9a6974918fc-SNAPSHOT"

import evo.derivation.*
import evo.derivation.circe.*
import evo.derivation.config.Config
import io.circe.Codec

final case class MyDataType(foo: String, bar: Int)

object MyDataType:
  implicit val actionCodec: Codec[MyDataType] =
    EvoCodec.derived[MyDataType](using Config.derived[MyDataType]) 
@Odomontois
Copy link
Collaborator

Odomontois commented Oct 17, 2022

Yeah, the lib is definitely supposed to be used when you need to write some of your derivation by hand.
I think, the the desired usage would be something like

object MyDataType:
  given Config[MyDataType] = Config.derived.copy(...) // some user customizations here
  given Codec[MyDataType] = EvoCodec.derived

If that suits you we can think of a better set of methods for config to make configuration easier.

Moreover, the derivation core is supposed to be a lightweight library so that one can use it in the "Public API" part. It doesn't mention any circe, etc. parts. So I still think that one can use annotations even in public API with no commitment to serialization\schema library

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants