From 55542796c030974f0e5fb32fcb24bf99f468532d Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Thu, 29 Mar 2018 12:20:31 -0700 Subject: Add option flag to parameters --- core/shared/src/main/scala/interface.scala | 3 +++ core/shared/src/main/scala/magnolia.scala | 3 +++ 2 files changed, 6 insertions(+) diff --git a/core/shared/src/main/scala/interface.scala b/core/shared/src/main/scala/interface.scala index af4fb51..ba65fb6 100644 --- a/core/shared/src/main/scala/interface.scala +++ b/core/shared/src/main/scala/interface.scala @@ -63,6 +63,9 @@ trait Param[Typeclass[_], Type] extends Serializable { /** the name of the parameter */ def label: String + /** flag indicating a parameter of type scala.Option */ + def option: Boolean + /** flag indicating a repeated (aka. vararg) parameter * * For example, for a case class, diff --git a/core/shared/src/main/scala/magnolia.scala b/core/shared/src/main/scala/magnolia.scala index c2dbf0a..2a15573 100644 --- a/core/shared/src/main/scala/magnolia.scala +++ b/core/shared/src/main/scala/magnolia.scala @@ -296,6 +296,7 @@ object Magnolia { q"""$paramsVal($idx) = $magnoliaPkg.Magnolia.param[$typeConstructor, $genericType, $paramType]( ${param.name.decodedName.toString}, + ${param.returnType.typeConstructor =:= typeOf[Option[_]].typeConstructor}, $repeated, $ref, $defaultVal, @@ -439,6 +440,7 @@ object Magnolia { * This method is intended to be called only from code generated by the Magnolia macro, and * should not be called directly from users' code. */ def param[Tc[_], T, P](name: String, + isOption: Boolean, isRepeated: Boolean, typeclassParam: => Tc[P], defaultVal: => Option[P], @@ -447,6 +449,7 @@ object Magnolia { ): Param[Tc, T] = new Param[Tc, T] { type PType = P def label: String = name + def option: Boolean = isOption def repeated: Boolean = isRepeated def default: Option[PType] = defaultVal def typeclass: Tc[PType] = typeclassParam -- cgit v1.2.3