Skip to content

Commit a5419d5

Browse files
committed
Faster code derivation with CodecMakerConfig parameter for Scala 3
1 parent 8f6c06d commit a5419d5

File tree

1 file changed

+12
-89
lines changed
  • jsoniter-scala-macros/shared/src/main/scala-3/com/github/plokhotnyuk/jsoniter_scala/macros

1 file changed

+12
-89
lines changed

jsoniter-scala-macros/shared/src/main/scala-3/com/github/plokhotnyuk/jsoniter_scala/macros/JsonCodecMaker.scala

Lines changed: 12 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -319,102 +319,32 @@ object CodecMakerConfig extends CodecMakerConfig(
319319
class PrintCodec
320320

321321
private[macros] given FromExpr[CodecMakerConfig] with {
322-
def extract[X: FromExpr](name: String, x: Expr[X])(using Quotes): X = {
323-
import quotes.reflect._
324-
325-
summon[FromExpr[X]].unapply(x).getOrElse(throw FromExprException(s"Can't parse $name: ${x.show}, tree: ${x.asTerm}", x))
326-
}
327-
328322
def unapply(x: Expr[CodecMakerConfig])(using Quotes): Option[CodecMakerConfig] = {
329323
import quotes.reflect._
330324

331325
x match
332-
case '{
333-
CodecMakerConfig(
334-
$exprFieldNameMapper,
335-
$exprJavaEnumValueNameMapper,
336-
$exprAdtLeafClassNameMapper,
337-
$exprDiscriminatorFieldName,
338-
$exprIsStringified,
339-
$exprMapAsArray,
340-
$exprSkipUnexpectedFields,
341-
$exprTransientDefault,
342-
$exprTransientEmpty,
343-
$exprTransientNone,
344-
$exprRequireCollectionFields,
345-
$exprBigDecimalPrecision,
346-
$exprBigDecimalScaleLimit,
347-
$exprBigDecimalDigitsLimit,
348-
$exprBigIntDigitsLimit,
349-
$exprBitSetValueLimit,
350-
$exprMapMaxInsertNumber,
351-
$exprSetMaxInsertNumber,
352-
$exprAllowRecursiveTypes,
353-
$exprRequireDiscriminatorFirst,
354-
$exprUseScalaEnumValueId,
355-
$exprSkipNestedOptionValues,
356-
$exprCirceLikeObjectEncoding,
357-
$exprEncodingOnly,
358-
$exprDecodingOnly,
359-
$exprRequireDefaultFields,
360-
$exprCheckFieldDuplication,
361-
$exprScalaTransientSupport,
362-
$exprInlineOneValueClasses,
363-
$exprAlwaysEmitDiscriminator)
364-
} =>
365-
try {
366-
Some(CodecMakerConfig(
367-
extract("fieldNameMapper", exprFieldNameMapper),
368-
extract("javaEnumValueNameMapper", exprJavaEnumValueNameMapper),
369-
extract("eadtLeafClassNameMapper", exprAdtLeafClassNameMapper),
370-
extract("discriminatorFieldName", exprDiscriminatorFieldName),
371-
extract("isStringified", exprIsStringified),
372-
extract("mapAsArray", exprMapAsArray),
373-
extract("skipUnexpectedFields", exprSkipUnexpectedFields),
374-
extract("transientDefault", exprTransientDefault),
375-
extract("transientEmpty", exprTransientEmpty),
376-
extract("transientNone", exprTransientNone),
377-
extract("requireCollectionFields", exprRequireCollectionFields),
378-
extract("bigDecimalPrecision", exprBigDecimalPrecision),
379-
extract("bigDecimalScaleLimit", exprBigDecimalScaleLimit),
380-
extract("bigDecimalDigitsLimit", exprBigDecimalDigitsLimit),
381-
extract("bigIntDigitsLimit", exprBigIntDigitsLimit),
382-
extract("bitSetValueLimit", exprBitSetValueLimit),
383-
extract("mapMaxInsertNumber", exprMapMaxInsertNumber),
384-
extract("setMaxInsertNumber", exprSetMaxInsertNumber),
385-
extract("allowRecursiveTypes", exprAllowRecursiveTypes),
386-
extract("requireDiscriminatorFirst", exprRequireDiscriminatorFirst),
387-
extract("useScalaEnumValueId", exprUseScalaEnumValueId),
388-
extract("skipNestedOptionValues", exprSkipNestedOptionValues),
389-
extract("circeLikeObjectEncoding", exprCirceLikeObjectEncoding),
390-
extract("decodingOnly", exprDecodingOnly),
391-
extract("encodingOnly", exprEncodingOnly),
392-
extract("requireDefaultFields", exprRequireDefaultFields),
393-
extract("checkFieldDuplication", exprCheckFieldDuplication),
394-
extract("scalaTransientSupport", exprScalaTransientSupport),
395-
extract("inlineOneValueClasses", exprInlineOneValueClasses),
396-
extract("alwaysEmitDiscriminator", exprAlwaysEmitDiscriminator),
397-
))
398-
} catch {
399-
case FromExprException(message, expr) =>
400-
report.warning(message, expr)
401-
None
402-
}
403-
case '{ ($x: CodecMakerConfig).withAllowRecursiveTypes($v) } => Some(x.valueOrAbort.withAllowRecursiveTypes(v.valueOrAbort))
404-
case '{ ($x: CodecMakerConfig).withDiscriminatorFieldName($v) } => Some(x.valueOrAbort.withDiscriminatorFieldName(v.valueOrAbort))
405-
case '{ ($x: CodecMakerConfig).withUseScalaEnumValueId($v) } => Some(x.valueOrAbort.withUseScalaEnumValueId(v.valueOrAbort))
406-
case '{ ($x: CodecMakerConfig).withIsStringified($v) } => Some(x.valueOrAbort.withIsStringified(v.valueOrAbort))
407326
case '{ CodecMakerConfig } => Some(CodecMakerConfig)
327+
case '{ ($x: CodecMakerConfig).withDiscriminatorFieldName($v) } => Some(x.valueOrAbort.withDiscriminatorFieldName(v.valueOrAbort))
408328
case '{ ($x: CodecMakerConfig).withFieldNameMapper($v) } => Some(x.valueOrAbort.copy(fieldNameMapper = ExprPartialFunctionWrapper(v)))
409329
case '{ ($x: CodecMakerConfig).withJavaEnumValueNameMapper($v) } => Some(x.valueOrAbort.copy(javaEnumValueNameMapper = ExprPartialFunctionWrapper(v)))
410330
case '{ ($x: CodecMakerConfig).withAdtLeafClassNameMapper($v) } => Some(x.valueOrAbort.copy(adtLeafClassNameMapper = ExprPartialFunctionWrapper('{ { case x => $v(x) } })))
331+
case '{ ($x: CodecMakerConfig).withAllowRecursiveTypes($v) } => Some(x.valueOrAbort.withAllowRecursiveTypes(v.valueOrAbort))
411332
case '{ ($x: CodecMakerConfig).withRequireDiscriminatorFirst($v) } => Some(x.valueOrAbort.copy(requireDiscriminatorFirst = v.valueOrAbort))
412-
case '{ ($x: CodecMakerConfig).withMapAsArray($v) } => Some(x.valueOrAbort.withMapAsArray(v.valueOrAbort))
333+
case '{ ($x: CodecMakerConfig).withCheckFieldDuplication($v) } => Some(x.valueOrAbort.withCheckFieldDuplication(v.valueOrAbort))
334+
case '{ ($x: CodecMakerConfig).withInlineOneValueClasses($v) } => Some(x.valueOrAbort.withInlineOneValueClasses(v.valueOrAbort))
335+
case '{ ($x: CodecMakerConfig).withUseScalaEnumValueId($v) } => Some(x.valueOrAbort.withUseScalaEnumValueId(v.valueOrAbort))
336+
case '{ ($x: CodecMakerConfig).withIsStringified($v) } => Some(x.valueOrAbort.withIsStringified(v.valueOrAbort))
337+
case '{ ($x: CodecMakerConfig).withDecodingOnly($v) } => Some(x.valueOrAbort.withDecodingOnly(v.valueOrAbort))
338+
case '{ ($x: CodecMakerConfig).withEncodingOnly($v) } => Some(x.valueOrAbort.withEncodingOnly(v.valueOrAbort))
413339
case '{ ($x: CodecMakerConfig).withSkipUnexpectedFields($v) } => Some(x.valueOrAbort.withSkipUnexpectedFields(v.valueOrAbort))
414340
case '{ ($x: CodecMakerConfig).withTransientDefault($v) } => Some(x.valueOrAbort.withTransientDefault(v.valueOrAbort))
415341
case '{ ($x: CodecMakerConfig).withTransientEmpty($v) } => Some(x.valueOrAbort.withTransientEmpty(v.valueOrAbort))
416342
case '{ ($x: CodecMakerConfig).withTransientNone($v) } => Some(x.valueOrAbort.withTransientNone(v.valueOrAbort))
417343
case '{ ($x: CodecMakerConfig).withRequireCollectionFields($v) } => Some(x.valueOrAbort.withRequireCollectionFields(v.valueOrAbort))
344+
case '{ ($x: CodecMakerConfig).withRequireDefaultFields($v) } => Some(x.valueOrAbort.withRequireDefaultFields(v.valueOrAbort))
345+
case '{ ($x: CodecMakerConfig).withScalaTransientSupport($v) } => Some(x.valueOrAbort.withScalaTransientSupport(v.valueOrAbort))
346+
case '{ ($x: CodecMakerConfig).withAlwaysEmitDiscriminator($v) } => Some(x.valueOrAbort.withAlwaysEmitDiscriminator(v.valueOrAbort))
347+
case '{ ($x: CodecMakerConfig).withMapAsArray($v) } => Some(x.valueOrAbort.withMapAsArray(v.valueOrAbort))
418348
case '{ ($x: CodecMakerConfig).withBigDecimalPrecision($v) } => Some(x.valueOrAbort.withBigDecimalPrecision(v.valueOrAbort))
419349
case '{ ($x: CodecMakerConfig).withBigDecimalScaleLimit($v) } => Some(x.valueOrAbort.withBigDecimalScaleLimit(v.valueOrAbort))
420350
case '{ ($x: CodecMakerConfig).withBigDecimalDigitsLimit($v) } => Some(x.valueOrAbort.withBigDecimalDigitsLimit(v.valueOrAbort))
@@ -424,13 +354,6 @@ object CodecMakerConfig extends CodecMakerConfig(
424354
case '{ ($x: CodecMakerConfig).withSetMaxInsertNumber($v) } => Some(x.valueOrAbort.withSetMaxInsertNumber(v.valueOrAbort))
425355
case '{ ($x: CodecMakerConfig).withSkipNestedOptionValues($v) } => Some(x.valueOrAbort.withSkipNestedOptionValues(v.valueOrAbort))
426356
case '{ ($x: CodecMakerConfig).withCirceLikeObjectEncoding($v) } => Some(x.valueOrAbort.withCirceLikeObjectEncoding(v.valueOrAbort))
427-
case '{ ($x: CodecMakerConfig).withDecodingOnly($v) } => Some(x.valueOrAbort.withDecodingOnly(v.valueOrAbort))
428-
case '{ ($x: CodecMakerConfig).withEncodingOnly($v) } => Some(x.valueOrAbort.withEncodingOnly(v.valueOrAbort))
429-
case '{ ($x: CodecMakerConfig).withRequireDefaultFields($v) } => Some(x.valueOrAbort.withRequireDefaultFields(v.valueOrAbort))
430-
case '{ ($x: CodecMakerConfig).withCheckFieldDuplication($v) } => Some(x.valueOrAbort.withCheckFieldDuplication(v.valueOrAbort))
431-
case '{ ($x: CodecMakerConfig).withScalaTransientSupport($v) } => Some(x.valueOrAbort.withScalaTransientSupport(v.valueOrAbort))
432-
case '{ ($x: CodecMakerConfig).withInlineOneValueClasses($v) } => Some(x.valueOrAbort.withInlineOneValueClasses(v.valueOrAbort))
433-
case '{ ($x: CodecMakerConfig).withAlwaysEmitDiscriminator($v) } => Some(x.valueOrAbort.withAlwaysEmitDiscriminator(v.valueOrAbort))
434357
case other =>
435358
report.error(s"Can't interpret ${other.show} as a constant expression, tree=$other")
436359
None

0 commit comments

Comments
 (0)