Use case objects for variants

pull/1/merge
Thibault Duplessis 2012-03-06 23:16:40 +01:00
parent fa0d737191
commit f59de1cad4
4 changed files with 37 additions and 19 deletions

View File

@ -17,7 +17,7 @@ case class DbGame(
positionHashes: String = "",
castles: String = "KQkq",
isRated: Boolean = false,
variant: Variant.Value = Variant.standard) {
variant: Variant = Standard) {
val players = List(whitePlayer, blackPlayer)

View File

@ -25,7 +25,7 @@ case class RawDbGame(
whitePlayer players find (_.color == "white") flatMap (_.decode)
blackPlayer players find (_.color == "black") flatMap (_.decode)
trueStatus Status fromInt status
trueVariant Variant fromInt variant
trueVariant Variant(variant)
validClock = clock flatMap (_.decode)
if validClock.isDefined == clock.isDefined
} yield DbGame(
@ -59,7 +59,7 @@ object RawDbGame {
positionHashes = positionHashes,
castles = castles,
isRated = isRated,
variant = Variant toInt variant
variant = variant.id
)
}

View File

@ -0,0 +1,34 @@
package lila.system
package model
sealed trait Variant {
val name: String
val id: Int
override def toString = name
}
case object Standard extends Variant {
val name = "standard"
val id = 1
}
case object Chess960 extends Variant {
val name = "chess960"
val id = 2
}
object Variant {
val all = List(Standard, Chess960)
val byId = all map { v => (v.id, v) } toMap
def apply(id: Int): Option[Variant] = byId get id
}

View File

@ -24,19 +24,3 @@ object Status extends Enumeration {
def fromInt(i: Int): Option[Value] = indexed get i
}
object Variant extends Enumeration {
val standard, chess960 = Value
def toInt(s: Value) = s match {
case x if x == standard 1
case x if x == chess960 2
}
val indexed: Map[Int, Value] = values map { v =>
toInt(v) -> v
} toMap
def fromInt(i: Int): Option[Value] = indexed get i
}