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 Jul 9, 2024
1 parent 3dc1748 commit 53c87bb
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 4 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 @@ -201,7 +201,7 @@ private case class DeriveSchema()(using val ctx: Quotes) {
List('{zio.schema.annotation.genericTypeInfo(ListMap.from(${typeMembersExpr}.zip(${typeArgsExpr}.map(name => TypeId.parse(name).asInstanceOf[TypeId.Nominal]))))})
} else List.empty
val annotations = '{ zio.Chunk.fromIterable(${Expr.ofSeq(annotationExprs)}) ++ zio.Chunk.fromIterable(${Expr.ofSeq(docAnnotationExpr)}) ++ zio.Chunk.fromIterable(${Expr.ofSeq(genericAnnotations)}) }
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 @@ -390,7 +390,7 @@ private case class DeriveSchema()(using val ctx: Quotes) {
} else List.empty
val annotations = '{ zio.Chunk.fromIterable(${Expr.ofSeq(annotationExprs)}) ++ zio.Chunk.fromIterable(${Expr.ofSeq(docAnnotationExpr.toList)}) ++ zio.Chunk.fromIterable(${Expr.ofSeq(genericAnnotations)}) }

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 @@ -189,6 +189,9 @@ import zio.{ Chunk, Scope }
maybeTypeInfo.contains(
genericTypeInfo(ListMap("T" -> TypeId.parse("scala.Int").asInstanceOf[TypeId.Nominal]))
),
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 @@ -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 53c87bb

Please sign in to comment.