forked from loafle/openapi-generator-original
42 lines
1.2 KiB
Plaintext
42 lines
1.2 KiB
Plaintext
package {{apiPackage}}
|
|
|
|
import {{modelPackage}}._
|
|
import org.json4s._
|
|
import scala.reflect.ClassTag
|
|
|
|
object EnumsSerializers {
|
|
|
|
def all = Seq[Serializer[_]](){{#models}}{{#model}}{{#hasEnums}}{{#vars}}{{#isEnum}} :+
|
|
new EnumNameSerializer({{classname}}Enums.{{datatypeWithEnum}}){{/isEnum}}{{/vars}}{{/hasEnums}}{{/model}}{{/models}}
|
|
|
|
|
|
|
|
private class EnumNameSerializer[E <: Enumeration: ClassTag](enum: E)
|
|
extends Serializer[E#Value] {
|
|
import JsonDSL._
|
|
|
|
val EnumerationClass = classOf[E#Value]
|
|
|
|
def deserialize(implicit format: Formats):
|
|
PartialFunction[(TypeInfo, JValue), E#Value] = {
|
|
case (t @ TypeInfo(EnumerationClass, _), json) if isValid(json) => {
|
|
json match {
|
|
case JString(value) =>
|
|
enum.withName(value)
|
|
case value =>
|
|
throw new MappingException(s"Can't convert $value to $EnumerationClass")
|
|
}
|
|
}
|
|
}
|
|
|
|
private[this] def isValid(json: JValue) = json match {
|
|
case JString(value) if enum.values.exists(_.toString == value) => true
|
|
case _ => false
|
|
}
|
|
|
|
def serialize(implicit format: Formats): PartialFunction[Any, JValue] = {
|
|
case i: E#Value => i.toString
|
|
}
|
|
}
|
|
|
|
} |