aboutsummaryrefslogtreecommitdiff
path: root/examples/src/main/scala/example.scala
blob: 7e9d80b185e3ee14a9f854536ae76a5f041fae35 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package magnolia

import language.experimental.macros

trait Extractor[T] {
  def extract(src: String): T
}

object Extractor extends Extractor_1 {
  
  def apply[T](fn: String => T): Extractor[T] = new Extractor[T] {
    def extract(source: String): T = fn(source)
  }

  implicit val intExtractor: Extractor[Int] = Extractor(_.toInt)
  implicit val stringExtractor: Extractor[String] = Extractor(identity)
  implicit val doubleExtractor: Extractor[Double] = Extractor(_.toDouble)
}

trait Extractor_1 {
  implicit def generic[T]: Extractor[T] = macro Macros.generic[T, Extractor[_]]
}