Scala 如何在幻象dsl中建模枚举类型?

Scala 如何在幻象dsl中建模枚举类型?,scala,enums,cassandra-2.1,phantom-dsl,Scala,Enums,Cassandra 2.1,Phantom Dsl,My case类包含如下所示的枚举参数: case class User(role: UserRole.UserRole, name: String) object UserRole extends Enumeration { type UserRole = Value val ADMIN, USER = Value } 如何将此案例建模为中的 提供的任何代码示例都会很有帮助。您需要使用EnumColumn,这正是为此而创建的。如果要将枚举用作键,则还需要使用默认帮助器方法创建基元

My case类包含如下所示的枚举参数:

case class User(role: UserRole.UserRole, name: String)

object UserRole extends Enumeration {
  type UserRole = Value
  val ADMIN, USER = Value
}
如何将此案例建模为中的


提供的任何代码示例都会很有帮助。

您需要使用
EnumColumn
,这正是为此而创建的。如果要将枚举用作键,则还需要使用默认帮助器方法创建基元

您可以使用定义枚举的两种风格

object Records extends Enumeration {
  type Records = Value
  val TypeOne, TypeTwo, TypeThree = Value
}

object NamedRecords extends Enumeration {
  type NamedRecords = Value
  val One = Value("one")
  val Two = Value("two")
}

object enum extends EnumColumn[Records.type](this, Records)
在您的情况下,这将是:

object role extends EnumColumn[UserRole.type](this, UserRole)
要将其用作索引,您需要:

implicit val userRolePrimitive = Primitive(UserRole)
更新自Phantom 2.0.0起+

object role extends EnumColumn[UserRole](this)

您不需要定义任何其他隐式,枚举现在本机支持作为索引。

我知道,IntelliJ Idea在代码编译时在下面一行显示错误。objectrole扩展了EnumColumn(this,UserRole){override lazy val name=“role”}因此,它是有效的。如果github示例可以更新为使用phantom建模数据的所有可能场景,这将对我们所有人都非常有帮助。干得好,谢谢弗拉维安。回答得好!但是从这里得到了有效的例子-