Enumeratum
scala
enumeratum
Scala has an amazing library do deal with enums: enumeratum
libraryDependencies += "com.beachape" %% "enumeratum" % "1.7.3"
it gives great declarative enum naming:
import enumeratum.EnumEntry._
import enumeratum._
sealed trait Color extends EnumEntry with Lowercase
object Color extends Enum[Color] {
override def values: IndexedSeq[Color] = findValues
case object Red extends Color
case object Green extends Color
}
By mixing Lowercase
it automatically provides name transformation based on the object name
and the Lowercase
rule
val c1 = Color.Red.entryName
// c1: String = "red"
val c2 = Color.Green.entryName
// c2: String = "green"
By changing Lowercase
to Uppercase
we will get another name transformer and name as a result
sealed trait Color extends EnumEntry with Uppercase
and get
val c1 = Color.Red.entryName
// c1: String = "RED"
val c2 = Color.Green.entryName
// c2: String = "GREEN"
but what if, maybe due to some weird requirements, maybe due to the kind of legacy,
you need to have red
and GREEN
?
Library copes with that elegantly!
Simply override method entryName
import enumeratum.EnumEntry._
import enumeratum._
sealed trait Color2 extends EnumEntry with Lowercase
object Color2 extends Enum[Color2] {
override def values: IndexedSeq[Color2] = findValues
case object Red extends Color2
case object Green extends Color2 {
override def entryName: String = "GREEN"
}
}
Lowercase
rule will be applied to all elements
but to other, for which we need another rule, we simply override withName
method.
And we get
val c3 = Color2.Red.entryName
// c3: String = "red"
val c4 = Color2.Green.entryName
// c4: String = "GREEN"
intel
cas
links
atomic
ruby
jekyll
blog
scala
markdown
mdoc
java
encapsulation
git
tag
http4s
saml
pac4j
linux
uuidgen
base64
lsof
jps
github
sed
cicd
teaching
laika
enumeratum
database
fp
SQL
interview