Skip to content

Commit

Permalink
Merge pull request #409 from VirtusLab/pprazak/fix-407
Browse files Browse the repository at this point in the history
  • Loading branch information
pawelprazak authored Feb 28, 2024
2 parents 0563595 + 186439a commit b7ede29
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 2 deletions.
4 changes: 2 additions & 2 deletions core/src/main/scala/besom/internal/codecs.scala
Original file line number Diff line number Diff line change
Expand Up @@ -689,13 +689,13 @@ object Encoder:
import Constants.*
import besom.json.*

def encoderSum[A](mirror: Mirror.SumOf[A], nameEncoderPairs: List[(String, Encoder[?])]): Encoder[A] =
def encoderSum[A](mirror: Mirror.SumOf[A], nameEncoderPairs: => List[(String, Encoder[?])]): Encoder[A] =
new Encoder[A]:
// TODO We only serialize dumb enums!!
// private val encoderMap = nameEncoderPairs.toMap
override def encode(a: A): Result[(Set[Resource], Value)] = Result.pure(Set.empty -> a.toString.asValue)

def encoderProduct[A](nameEncoderPairs: List[(String, Encoder[?])]): Encoder[A] =
def encoderProduct[A](nameEncoderPairs: => List[(String, Encoder[?])]): Encoder[A] =
new Encoder[A]:
override def encode(a: A): Result[(Set[Resource], Value)] =
Result
Expand Down
19 changes: 19 additions & 0 deletions core/src/test/scala/besom/internal/EncoderTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -454,3 +454,22 @@ object Regression383Test:
besom.internal.Encoder.derived[SecretArgs]
given argsEncoder(using besom.types.Context): besom.types.ArgsEncoder[SecretArgs] =
besom.internal.ArgsEncoder.derived[SecretArgs]
end Regression383Test

class RecurrentArgsTest extends munit.FunSuite with ValueAssertions:
case class Recurrent(value: Option[Recurrent])
object Recurrent:
given encoder(using besom.types.Context): besom.types.Encoder[Recurrent] =
besom.internal.Encoder.derived[Recurrent]

test("encode recurrent type") {
given Context = DummyContext().unsafeRunSync()
val e = summon[Encoder[Recurrent]]

val (_, encoded) = e.encode(Recurrent(Some(Recurrent(Some(Recurrent(Some(Recurrent(None)))))))).unsafeRunSync()

val expected =
Map("value" -> Map("value" -> Map("value" -> Map().asValue).asValue).asValue).asValue
assertEqualsValue(encoded, expected)
}
end RecurrentArgsTest

0 comments on commit b7ede29

Please sign in to comment.