Skip to content

Commit

Permalink
Generate in Scala 3 macro typeId without type parameters (#694)
Browse files Browse the repository at this point in the history
  • Loading branch information
987Nabil committed Jun 29, 2024
1 parent 91899ff commit 6676045
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ private case class DeriveSchema()(using val ctx: Quotes) {
val selfRefSymbol = Symbol.newVal(Symbol.spliceOwner, s"derivedSchema${stack.size}", TypeRepr.of[Schema[T]], Flags.Lazy, Symbol.noSymbol)
val selfRef = Ref(selfRefSymbol)

val typeInfo = '{TypeId.parse(${Expr(TypeRepr.of[T].show)})}
val typeInfo = '{TypeId.parse(${Expr(TypeRepr.of[T].classSymbol.get.fullName.replaceAll("\\$", ""))})}
val isEnumCase = Type.of[T] match {
case '[reflect.Enum] => true
case _ => false
Expand Down Expand Up @@ -196,7 +196,7 @@ private case class DeriveSchema()(using val ctx: Quotes) {
else TypeRepr.of[T].typeSymbol.annotations.filter (filterAnnotation).map (_.asExpr)

val annotations = '{ zio.Chunk.fromIterable(${Expr.ofSeq(annotationExprs)}) ++ zio.Chunk.fromIterable(${Expr.ofSeq(docAnnotationExpr)}) }
val typeInfo = '{TypeId.parse(${Expr(TypeRepr.of[T].show)})}
val typeInfo = '{TypeId.parse(${Expr(TypeRepr.of[T].classSymbol.get.fullName.replaceAll("\\$", ""))})}

val applied = if (labels.length <= 22) {

Expand Down Expand Up @@ -374,7 +374,7 @@ private case class DeriveSchema()(using val ctx: Quotes) {
}
val annotations = '{ zio.Chunk.fromIterable(${Expr.ofSeq(annotationExprs)}) ++ zio.Chunk.fromIterable(${Expr.ofSeq(docAnnotationExpr.toList)}) }

val typeInfo = '{TypeId.parse(${Expr(TypeRepr.of[T].show)})}
val typeInfo = '{TypeId.parse(${Expr(TypeRepr.of[T].classSymbol.get.fullName.replaceAll("\\$", ""))})}

val applied = if (cases.length <= 22) {
val args = List(typeInfo) ++ cases :+ annotations
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,9 @@ import zio.{ Chunk, Scope }
.fields(0)
.annotations
assertTrue(
capturedSchema.schema.asInstanceOf[Schema.Record[GenericRecordWithDefaultValue[Int]]].id == TypeId.parse(
"zio.schema.DeriveSpec.GenericRecordWithDefaultValue"
),
annotations.exists { a =>
a.isInstanceOf[fieldDefaultValue[_]] &&
a.asInstanceOf[fieldDefaultValue[Option[Int]]].value == None
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ object DefaultValueSpec extends ZIOSpecDefault {

def spec: Spec[TestEnvironment, Any] =
suite("Custom Spec")(
customSuite,
customSuite
) @@ timeout(90.seconds)

private val customSuite = suite("custom")(
Expand All @@ -24,7 +24,7 @@ object DefaultValueSpec extends ZIOSpecDefault {
)
)

case class WithDefaultValue(orderId:Int, description: String = "desc")
case class WithDefaultValue(orderId: Int, description: String = "desc")

object WithDefaultValue {
implicit lazy val schema: Schema[WithDefaultValue] = DeriveSchema.gen[WithDefaultValue]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ trait SchemaPlatformSpecific {
Schema[String].transformOrFail(
string =>
try {
Right(new java.net.URL(string))
Right(new java.net.URI(string).toURL)
} catch { case _: Exception => Left(s"Invalid URL: $string") },
url => Right(url.toString)
)
Expand Down

0 comments on commit 6676045

Please sign in to comment.