Skip to content

Commit

Permalink
Merge branch 'master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
zawodskoj authored Mar 4, 2025
2 parents 9184fa1 + 1103976 commit b5748a1
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 2 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ jobs:
run: sbt ++${{ matrix.scala }} test

- name: Compress target directories
run: tar cf targets.tar modules/zioJson/target modules/tests/target modules/tethys/target modules/pureconfig/target modules/catsTagless/target modules/ciris/target modules/scalacheck/target modules/circeMagnolia/target modules/circe/target target modules/tethysMagnolia/target modules/cats/target modules/zioSchema/target modules/core/target modules/sangria/target modules/reactivemongo/target project/target
run: tar cf targets.tar modules/tests/target modules/zioJson/target modules/tethys/target modules/pureconfig/target modules/catsTagless/target modules/ciris/target modules/scalacheck/target modules/circeMagnolia/target modules/circe/target target modules/tethysMagnolia/target modules/cats/target modules/core/target modules/vulcan/target modules/sangria/target modules/reactivemongo/target project/target

- name: Upload target directories
uses: actions/upload-artifact@v2
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ assert(parse("""{"stringName":"WWW","integerAge":20}""").flatMap(_.as[Bar]) == R
```

To change default `io.circe.magnolia.configured.Configuration`:
```
```scala
import derevo.derive
import derevo.circe.magnolia.{customizableDecoder, customizableEncoder}

Expand Down
8 changes: 8 additions & 0 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ lazy val derevo = project
sangria,
zioJson,
zioSchema,
vulcan,
tests,
)

Expand Down Expand Up @@ -181,6 +182,13 @@ lazy val zioSchema =
.settings(
name := "derevo-zio-schema",
libraryDependencies ++= Seq(Dependencies.zioSchema, Dependencies.zioSchemaDerivation),

lazy val vulcan =
(project in file("modules/vulcan"))
.settings(publishSettings)
.settings(
name := "derevo-vulcan",
libraryDependencies ++= Seq(Dependencies.vulcanGeneric),
)
.dependsOn(core)

Expand Down
18 changes: 18 additions & 0 deletions modules/vulcan/src/main/scala/derevo/vulcan/avroCodec.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package derevo.vulcan

import derevo.{Derivation, NewTypeDerivation}
import magnolia.{CaseClass, Magnolia, SealedTrait}
import vulcan.Codec
import vulcan.generic._

object avroCodec extends Derivation[Codec] with NewTypeDerivation[Codec] {

type Typeclass[A] = Codec[A]

def combine[A](caseClass: CaseClass[Codec, A]): Codec[A] = Codec.combine(caseClass)

def dispatch[A](sealedTrait: SealedTrait[Codec, A]): Codec.Aux[Any, A] = Codec.dispatch(sealedTrait)

def instance[A]: Codec[A] = macro Magnolia.gen[A]

}
37 changes: 37 additions & 0 deletions modules/vulcan/src/test/scala/derevo/vulcan/AvroCodecTest.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package derevo.vulcan

import org.apache.avro.Schema
import derevo.derive
import org.scalatest.Assertion
import org.scalatest.flatspec.AnyFlatSpec
import org.scalatest.matchers.should.Matchers
import vulcan.Codec
import vulcan.generic.{AvroDoc, AvroName}

import java.time.Instant

@derive(avroCodec)
case class Foo(i: Int, s: String, bar: Bar)

@derive(avroCodec)
case class Bar(
@AvroName("time_dttm") @AvroDoc("Timestamp")
timestamp: Instant,
@AvroName("int_list") @AvroDoc("List of ints")
intList: List[Int]
)

class AvroCodecTest extends AnyFlatSpec with Matchers {

val fooSchema: String =
"""{"type":"record","name":"Foo","namespace":"derevo.vulcan","fields":[{"name":"i","type":"int"},{"name":"s","type":"string"},{"name":"bar","type":{"type":"record","name":"Bar","fields":[{"name":"time_dttm","type":{"type":"long","logicalType":"timestamp-millis"},"doc":"Timestamp"},{"name":"int_list","type":{"type":"array","items":"int"},"doc":"List of ints"}]}}]}"""

def assertSchema[A: Codec](schemaStr: String): Assertion = {
val expectedSchema = new Schema.Parser().parse(schemaStr.mkString.trim)
Codec[A].schema shouldBe Right(expectedSchema)
}

"Writer derivation for ADT" should "work correctly" in {
assertSchema[Foo](fooSchema)
}
}
4 changes: 4 additions & 0 deletions project/Dependencies.scala
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ object Dependencies {
val zioJson = "0.6.2"

val zioSchema = "1.1.1"

val vulcan = "1.10.1"
}

lazy val magnolia = "com.propensive" %% "magnolia" % Version.magnolia
Expand Down Expand Up @@ -74,6 +76,8 @@ object Dependencies {
lazy val zioSchemaDerivation = "dev.zio" %% "zio-schema-derivation" % Version.zioSchema
lazy val zioJson = "dev.zio" %% "zio-json" % Version.zioJson

lazy val vulcanGeneric = "com.github.fd4s" %% "vulcan-generic" % Version.vulcan

lazy val macroParadise = "org.scalamacros" % "paradise" % Version.macroParadise cross CrossVersion.patch
lazy val kindProjector = "org.typelevel" %% "kind-projector" % Version.kindProjector cross CrossVersion.patch

Expand Down

0 comments on commit b5748a1

Please sign in to comment.