aboutsummaryrefslogblamecommitdiff
path: root/examples/shared/src/main/scala/typename.scala
blob: 2030cdaa5e6860b30f89aa45de38e73ea5ee0dbb (plain) (tree)
1
2
3
4
5
6
7
8





                                   
                                            
 



                                                                    
 

                                                                       
 
                                                              
 
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]
}