Play2.0+Scala Anormのパーサを追加する
お久しぶりです、こんにちは。
最近は、Play2+Scalaで開発を行っています。
データベースのアクセスはAnormを使ってますが、Floatを扱おうとするとデフォルトではパーサが用意されていません。
doubleで代用もできますが、どうしてもfloatを使いたい場合は自前で用意する必要が有ります。
import anorm._
import anorm.SqlParser._
object HogeTable {
val simple = {
get[Int]("id")~
get[Float]("float_value") map { // ← ここでコンパイルエラー
case id~float_value => (id, float_value)
}
}
}Float用のパーサを追加。
object HogeTable {
// Float用のパーサ
implicit def rowParserFloat: Column[Float] = Column.nonNull { (value, meta) =>
val MetaDataItem(column, nullable, clazz) = meta
value match {
case d: Float => Right(d)
case _ => Left(TypeDoesNotMatch(value + "は、Floatじゃないよ!"))
}
}
val simple = {
get[Int]("id")~
get[Float]("float_value") map {
case id~float_value => (id, float_value)
}
}
}これで、問題なくFloatもパースできるようになります。
上記例では、1オブジェクト内に記述していますが、実際はrowParserFloatメソッドを外部オブジェクトファイルにし、importで利用するようにすれば再利用できます。