aboutsummaryrefslogtreecommitdiff
path: root/examples/shared/src/main/scala/default.scala
diff options
context:
space:
mode:
Diffstat (limited to 'examples/shared/src/main/scala/default.scala')
-rw-r--r--examples/shared/src/main/scala/default.scala16
1 files changed, 16 insertions, 0 deletions
diff --git a/examples/shared/src/main/scala/default.scala b/examples/shared/src/main/scala/default.scala
index 4b781a5..fb5966f 100644
--- a/examples/shared/src/main/scala/default.scala
+++ b/examples/shared/src/main/scala/default.scala
@@ -36,3 +36,19 @@ object Default {
/** generates default instances of [[Default]] for case classes and sealed traits */
implicit def gen[T]: Default[T] = macro Magnolia.gen[T]
}
+
+object DefaultNoCoproduct {
+
+ type Typeclass[T] = Default[T]
+
+ /** constructs a default for each parameter, using the constructor default (if provided),
+ * otherwise using a typeclass-provided default */
+ def combine[T](ctx: CaseClass[Default, T]): Default[T] = new Default[T] {
+ def default = ctx.construct { param =>
+ param.default.getOrElse(param.typeclass.default)
+ }
+ }
+
+ /** generates default instances of [[Default]] for case classes and sealed traits */
+ implicit def gen[T]: Default[T] = macro Magnolia.gen[T]
+}