我遇到了这个article,它演示了与无形无关的新游戏验证API。我虽然无法重新创建代码片段(可能是因为我不知道从哪里导入)。
import play.api.libs.json._
import play.api.data.mapping._
import play.api.data.mapping.json._
import shapeless.ops.zipper._
case class User( email: String, password: String )
val reads = Rule.gen[JsValue, User]
// This line is based on code of the article but I'm not sure how to implement it
val validation = Get{ __ =>
( __ \ 'email ).read( email )
}
( reads compose validation ).validate( ... )
如何正确创建Get
实例?如文章暗示的那样,这种方法与无形镜片有什么关系呢?
答案 0 :(得分:4)
我是博文的作者。这是我刚写的完整代码。您需要验证实验,因此您可以将repo和sbt控制台克隆到项目中,或者将依赖项添加到项目中。我刚刚写了这篇文章,所以这取决于一个非常老的无形状版本。
import play.api.data.mapping._
import shapeless._
case class ContactInformation(
label: String,
email: String,
phones: Seq[String])
case class Contact(
firstname: String,
lastname: String,
age: Int,
informations: Seq[ContactInformation])
object Rules extends GenericRules
import Rules._
val contactInfoG = Get[ContactInformation]{ __ =>
(__ \ 'label).read(notEmpty) ~>
(__ \ 'email).read(email)
}
val contactG = Get[Contact]{ __ =>
(__ \ 'age).read(min(0)) ~>
(__ \ 'informations).read(seqR(contactInfoG))
}
val contact = Contact("Julien", "Tournay", -1, Seq(ContactInformation("Personal", "not quite what I expected", List("01.23.45.67.89", "98.76.54.32.10"))))
contactG.validate(contact)
与镜头的关系如下。验证意味着使用像json或xml这样的树形数据结构。它以道路概念为中心。基本上,API适用于任何数据结构,如果它可以通过路径浏览。这是路径(__ \'年龄),您可以在此位置获取/插入数据。
Lens为您提供了一个方便的API来处理案例类。所以在幕后,(__ \'age).read(min(0))将使用镜头访问Contact类中的字段时代(并且它完全是类型安全的)。
我没有太多时间知道,所以不要犹豫提问,我会回答一下:)