aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Odersky <jakob@odersky.com>2018-03-29 12:20:31 -0700
committerJakob Odersky <jakob@odersky.com>2018-06-19 14:45:40 -0400
commit97e0f9cc8b57c27ba2df8b860a1dc37e40acfb1a (patch)
tree97a8e30700ba60015626ecbfacaee85a7a638646
parent831ad878b7df9edfa05476a9f33d448d7907bec9 (diff)
downloadmagnolia-option.tar.gz
magnolia-option.tar.bz2
magnolia-option.zip
Add option flag to parametersoption
-rw-r--r--core/shared/src/main/scala/interface.scala3
-rw-r--r--core/shared/src/main/scala/magnolia.scala3
2 files changed, 6 insertions, 0 deletions
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