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で利用するようにすれば再利用できます。