1- /* package pl.iterators.kebs.jsoniter.enums
1+ package pl .iterators .kebs .jsoniter .enums
22
33import pl .iterators .kebs .core .enums .{EnumLike , ValueEnumLike , ValueEnumLikeEntry }
44import com .github .plokhotnyuk .jsoniter_scala .core ._
5- import com.github.plokhotnyuk.jsoniter_scala.macros._
65
76trait KebsJsoniterEnums {
8- @inline protected final def enumNameDeserializationError[E](`enum`: EnumLike[E], name: String): String = {
9- val enumNames = `enum`.getNamesToValuesMap.values.mkString(", ")
10- s"$name should be one of $enumNames"
11- }
12-
13- @inline protected final def enumValueDeserializationError[E](`enum`: EnumLike[E], value: String): String = {
14- val enumNames = `enum`.getNamesToValuesMap.values.mkString(", ")
15- s"$value should be a string of value $enumNames"
16- }
17-
18- protected final def enumJsonValueCodec[E](`enum`: EnumLike[E], map: E => String, comap: String => Option[E]): JsonValueCodec[E] = {
7+ protected final def enumJsonValueCodec [E ](
8+ `enum` : EnumLike [E ],
9+ map : E => String ,
10+ comap : String => Option [E ]
11+ ): JsonValueCodec [E ] =
1912 new JsonValueCodec [E ] {
2013 override def decodeValue (in : JsonReader , default : E ): E = {
2114 val stringValue = in.readString(null )
2215 comap(stringValue).getOrElse {
23- val enumValues = `enum`.valuesToNamesMap .values.mkString(", ")
24- throw new JsoniterReaderExceptionImpl (s"$stringValue is not a member of enum values: $enumValues ")
16+ val enumNames = `enum`.getNamesToValuesMap .values.mkString(" , " )
17+ in.decodeError (s " $stringValue should be one of $enumNames " )
2518 }
2619 }
27-
28- override def encodeValue(x: E, out: JsonWriter): Unit = {
29- val stringValue = map(x)
30- out.writeVal(stringValue)
31- }
32-
33- override def nullValue: E = null.asInstanceOf[E]
20+ override def encodeValue (x : E , out : JsonWriter ): Unit = out.writeVal(map(x))
21+ override def nullValue : E = null .asInstanceOf [E ]
3422 }
35- }
3623
37- def enumJsonValueCodec [E](`enum`: EnumLike[E]): JsonValueCodec[E] =
24+ def defaultEnumJsonValueCodec [E ](`enum` : EnumLike [E ]): JsonValueCodec [E ] =
3825 enumJsonValueCodec[E ](`enum`, _.toString, `enum`.withNameInsensitiveOption(_))
3926
4027 def uppercaseEnumJsonValueCodec [E ](`enum` : EnumLike [E ]): JsonValueCodec [E ] =
@@ -43,67 +30,35 @@ trait KebsJsoniterEnums {
4330 def lowercaseEnumJsonValueCodec [E ](`enum` : EnumLike [E ]): JsonValueCodec [E ] =
4431 enumJsonValueCodec[E ](`enum`, _.toString.toLowerCase, `enum`.withNameLowercaseOnlyOption(_))
4532
46- implicit def enumCodecImpl[E](implicit ev: EnumLike[E]): JsonValueCodec[E] = enumJsonValueCodec(ev)
33+ implicit def enumCodec [E ](implicit ev : EnumLike [E ]): JsonValueCodec [E ] = defaultEnumJsonValueCodec(ev)
34+ }
4735
48- trait KebsJsoniterEnumsUppercase {
49- implicit def enumJsonValueCodecImpl[E](implicit ev: EnumLike[E]): JsonValueCodec[E] =
50- uppercaseEnumJsonValueCodec(ev)
51- }
36+ trait KebsJsoniterEnumsUppercase extends KebsJsoniterEnums {
37+ override implicit def enumCodec [E ](implicit ev : EnumLike [E ]): JsonValueCodec [E ] = uppercaseEnumJsonValueCodec(ev)
38+ }
5239
53- trait KebsJsoniterEnumsLowercase {
54- implicit def enumJsonValueCodecImpl[E](implicit ev: EnumLike[E]): JsonValueCodec[E] =
55- lowercaseEnumJsonValueCodec(ev)
56- }
40+ trait KebsJsoniterEnumsLowercase extends KebsJsoniterEnums {
41+ override implicit def enumCodec [E ](implicit ev : EnumLike [E ]): JsonValueCodec [E ] = lowercaseEnumJsonValueCodec(ev)
5742}
5843
5944trait KebsJsoniterValueEnums {
60- sealed trait NotGiven[A]
61-
62- object NotGiven extends LowPriorityNotGiven {
63- implicit def amb1[A](implicit ev: A): NotGiven[A] = sys.error("should not be called")
64- implicit def amb2[A](implicit ev: A): NotGiven[A] = sys.error("should not be called")
65- }
66-
67- trait LowPriorityNotGiven {
68- implicit def notFound[A]: NotGiven[A] = new NotGiven[A] {}
69- }
70-
71- inline implicit def exportCodec[E]: JsonValueCodec[E] = {
72- JsonCodecMaker.make[E](
73- CodecMakerConfig
74- .withDiscriminatorFieldName(None)
75- .withAllowRecursiveTypes(true)
76- .withTransientEmpty(false)
77- .withTransientNull(false)
78- .withTransientNone(false)
79- )
80- }
81-
82- @inline protected final def valueEnumDeserializationError[V, E <: ValueEnumLikeEntry[V]](`enum`: ValueEnumLike[V, E], value: V) = {
83- val enumValues = `enum`.getValuesToEntriesMap.keys.mkString(", ")
84- throw new JsoniterReaderExceptionImpl(s"$value is not a member of $enumValues")
85- }
86-
87- def valueEnumCodec[V, E <: ValueEnumLikeEntry[V]](`enum`: ValueEnumLike[V, E])(implicit baseJsonCodec: JsonValueCodec[V]) =
45+ def valueEnumJsonValueCodec [V , E <: ValueEnumLikeEntry [V ]](
46+ `enum` : ValueEnumLike [V , E ]
47+ )(implicit baseCodec : JsonValueCodec [V ]): JsonValueCodec [E ] =
8848 new JsonValueCodec [E ] {
8949 override def decodeValue (in : JsonReader , default : E ): E = {
90- val value = baseJsonCodec .decodeValue(in, baseJsonCodec .nullValue)
91- `enum`.withValueOption(value).getOrElse(valueEnumDeserializationError(`enum`, value))
92- }
93- override def encodeValue(x: E, out: JsonWriter): Unit = {
94- baseJsonCodec.encodeValue(x.value, out)
50+ val value = baseCodec .decodeValue(in, baseCodec .nullValue)
51+ `enum`.withValueOption(value).getOrElse {
52+ val enumValues = `enum`.getValuesToEntriesMap.keys.mkString( " , " )
53+ throw new RuntimeException ( s " $value is not a member of $enumValues " )
54+ }
9555 }
96- override def nullValue: E = null.asInstanceOf[E]
56+ override def encodeValue (x : E , out : JsonWriter ): Unit = baseCodec.encodeValue(x.value, out)
57+ override def nullValue : E = null .asInstanceOf [E ]
9758 }
9859
99- implicit def valueEnumCodecImpl [V, E <: ValueEnumLikeEntry[V]](implicit
60+ implicit def valueEnumCodec [V , E <: ValueEnumLikeEntry [V ]](implicit
10061 ev : ValueEnumLike [V , E ],
101- codec: JsonValueCodec[V]
102- ): JsonValueCodec[E] =
103- valueEnumCodec(ev)
104- }
105-
106- class JsoniterReaderExceptionImpl(reason: String) extends Exception {
107- override def getMessage(): String = reason
62+ baseCodec : JsonValueCodec [V ]
63+ ): JsonValueCodec [E ] = valueEnumJsonValueCodec(ev)
10864}
109- */
0 commit comments