aboutsummaryrefslogtreecommitdiff
path: root/examples/shared/src/main/scala/typename.scala
blob: 2030cdaa5e6860b30f89aa45de38e73ea5ee0dbb (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 TypeNameInfo[T] { def name: TypeName }

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

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

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