aboutsummaryrefslogtreecommitdiff
path: root/examples/shared/src/main/scala/typename.scala
blob: cdc4b011456a31b4f0bbe10aa372162273f57191 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package magnolia.examples

import language.experimental.macros

import magnolia._

trait TypeName[T] { def name: String }

object TypeName {
  type Typeclass[T] = TypeName[T]
  def combine[T](ctx: CaseClass[TypeName, T]): TypeName[T] =
    new TypeName[T] { def name: String = ctx.typeName }

  def dispatch[T](ctx: SealedTrait[TypeName, T]): TypeName[T] =
    new TypeName[T] { def name: String = ctx.typeName }

  implicit def gen[T]: TypeName[T] = macro Magnolia.gen[T]
}