blob: aa01f0e6c30bf40c09aaab27808739bc8cece36b (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
package org.perl8
package object test {
import language.implicitConversions
implicit def intToPlan (p: Int): Plan =
NumericPlan(p)
implicit def stringToMessage (s: String): Message =
new HasMessage(s)
sealed trait Plan {
val plan: Int
val skipAll: Boolean
val message: Option[String]
}
case class NumericPlan (
override val plan: Int
) extends Plan {
override val skipAll = false
override val message = None
}
case class SkipAll (
override val message: Option[String] = None
) extends Plan {
override val plan = 0
override val skipAll = true
}
object SkipAll {
def apply (reason: String) = new SkipAll(Some(reason))
}
sealed trait Message
case class HasMessage (val contents: String) extends Message
case object NoMessage extends Message
implicit def messageToOption (message: Message): Option[String] =
message match {
case HasMessage(x) => Some(x)
case NoMessage => None
}
implicit def optionToMessage (option: Option[String]): Message =
option match {
case Some(x) => HasMessage(x)
case None => NoMessage
}
case class BailOutException (val message: String)
extends RuntimeException(message)
}
|