@@ -17,49 +17,47 @@ object ArgonautCodecsInternals extends ArgonautCodecsExtra {
17
17
18
18
sealed abstract class IsWrapper [W ]
19
19
20
- implicit def isWrapperEncode [W , L <: HList , T ]
21
- (implicit
22
- ev : IsWrapper [W ],
23
- gen : Generic .Aux [W , L ],
24
- isHCons : ops.hlist.IsHCons .Aux [L , T , HNil ],
25
- underlying : EncodeJson [T ]
26
- ): EncodeJson [W ] =
20
+ implicit def isWrapperEncode [W , L <: HList , T ](implicit
21
+ ev : IsWrapper [W ],
22
+ gen : Generic .Aux [W , L ],
23
+ isHCons : ops.hlist.IsHCons .Aux [L , T , HNil ],
24
+ underlying : EncodeJson [T ]
25
+ ): EncodeJson [W ] =
27
26
EncodeJson { w =>
28
27
val t = isHCons.head(gen.to(w))
29
28
t.asJson
30
29
}
31
30
32
- implicit def isWrapperDecode [W , L <: HList , T ]
33
- (implicit
34
- ev : IsWrapper [W ],
35
- gen : Generic .Aux [W , L ],
36
- isHCons : ops.hlist.IsHCons .Aux [L , T , HNil ],
37
- underlying : DecodeJson [T ]
38
- ): DecodeJson [W ] =
31
+ implicit def isWrapperDecode [W , L <: HList , T ](implicit
32
+ ev : IsWrapper [W ],
33
+ gen : Generic .Aux [W , L ],
34
+ isHCons : ops.hlist.IsHCons .Aux [L , T , HNil ],
35
+ underlying : DecodeJson [T ]
36
+ ): DecodeJson [W ] =
39
37
DecodeJson { c =>
40
- c.as[T ].map(t =>
41
- gen.from((t :: HNil ).asInstanceOf [L ]) // FIXME
42
- )
38
+ c.as[T ]
39
+ .map(t => gen.from((t :: HNil ).asInstanceOf [L ]) // FIXME
40
+ )
43
41
}
44
42
45
- implicit val boxMeanBoolIsWrapper : IsWrapper [BoxMean .Bool ] = null
46
- implicit val boxPointsBoolIsWrapper : IsWrapper [BoxPoints .Bool ] = null
47
- implicit val sequenceDoublesIsWrapper : IsWrapper [Sequence .Doubles ] = null
43
+ implicit val boxMeanBoolIsWrapper : IsWrapper [BoxMean .Bool ] = null
44
+ implicit val boxPointsBoolIsWrapper : IsWrapper [BoxPoints .Bool ] = null
45
+ implicit val sequenceDoublesIsWrapper : IsWrapper [Sequence .Doubles ] = null
48
46
implicit val sequenceNestedDoublesIsWrapper : IsWrapper [Sequence .NestedDoubles ] = null
49
- implicit val sequenceNestedIntsIsWrapper : IsWrapper [Sequence .NestedInts ] = null
50
- implicit val sequenceStringsIsWrapper : IsWrapper [Sequence .Strings ] = null
51
- implicit val sequenceDatetimesIsWrapper : IsWrapper [Sequence .DateTimes ] = null
52
- implicit val rangeDoublesIsWrapper : IsWrapper [Range .Doubles ] = null
53
- implicit val rangeDatetimesIsWrapper : IsWrapper [Range .DateTimes ] = null
54
- implicit val doubleElementIsWrapper : IsWrapper [Element .DoubleElement ] = null
55
- implicit val stringElementIsWrapper : IsWrapper [Element .StringElement ] = null
56
- implicit def oneOrSeqOneIsWrapper [T ]: IsWrapper [OneOrSeq .One [T ]] = null
57
- implicit def oneOrSeqSequenceIsWrapper [T ]: IsWrapper [OneOrSeq .Sequence [T ]] = null
47
+ implicit val sequenceNestedIntsIsWrapper : IsWrapper [Sequence .NestedInts ] = null
48
+ implicit val sequenceStringsIsWrapper : IsWrapper [Sequence .Strings ] = null
49
+ implicit val sequenceDatetimesIsWrapper : IsWrapper [Sequence .DateTimes ] = null
50
+ implicit val rangeDoublesIsWrapper : IsWrapper [Range .Doubles ] = null
51
+ implicit val rangeDatetimesIsWrapper : IsWrapper [Range .DateTimes ] = null
52
+ implicit val doubleElementIsWrapper : IsWrapper [Element .DoubleElement ] = null
53
+ implicit val stringElementIsWrapper : IsWrapper [Element .StringElement ] = null
54
+ implicit def oneOrSeqOneIsWrapper [T ]: IsWrapper [OneOrSeq .One [T ]] = null
55
+ implicit def oneOrSeqSequenceIsWrapper [T ]: IsWrapper [OneOrSeq .Sequence [T ]] = null
58
56
59
57
def flagEncoder [T , F ](flags : T => Set [F ], label : F => String ): EncodeJson [T ] =
60
58
EncodeJson { t =>
61
59
val s = flags(t).toSeq match {
62
- case Seq () => " none"
60
+ case Seq () => " none"
63
61
case nonEmpty => nonEmpty.map(label).mkString(" +" )
64
62
}
65
63
@@ -73,12 +71,14 @@ object ArgonautCodecsInternals extends ArgonautCodecsExtra {
73
71
if (s == " none" )
74
72
DecodeResult .ok(Set .empty[F ])
75
73
else
76
- s.split('+' ).foldLeft[DecodeResult [Set [F ]]](DecodeResult .ok(Set .empty[F ])) {
77
- case (acc, f) =>
78
- for {
79
- acc0 <- acc
80
- f0 <- map.get(f).fold[DecodeResult [F ]](DecodeResult .fail(s " Unrecognized $type0: $f" , c.history))(DecodeResult .ok)
81
- } yield acc0 + f0
74
+ s.split('+' ).foldLeft[DecodeResult [Set [F ]]](DecodeResult .ok(Set .empty[F ])) { case (acc, f) =>
75
+ for {
76
+ acc0 <- acc
77
+ f0 <-
78
+ map
79
+ .get(f)
80
+ .fold[DecodeResult [F ]](DecodeResult .fail(s " Unrecognized $type0: $f" , c.history))(DecodeResult .ok)
81
+ } yield acc0 + f0
82
82
}
83
83
84
84
flags.map(build)
@@ -94,76 +94,75 @@ object ArgonautCodecsInternals extends ArgonautCodecsExtra {
94
94
95
95
def instance [T ](f : T => String ): IsEnum [T ] =
96
96
new IsEnum [T ] {
97
- def label (t : T ) = f(t)
97
+ def label (t : T ): String = f(t)
98
98
}
99
99
}
100
100
101
101
implicit def isEnumEncoder [T : IsEnum ]: EncodeJson [T ] =
102
102
EncodeJson .of[String ].contramap(IsEnum [T ].label)
103
103
104
- implicit def isEnumDecoder [T ]
105
- (implicit
106
- isEnum : IsEnum [T ],
107
- enum : Enumerate [T ],
108
- typeable : Typeable [T ]
109
- ): DecodeJson [T ] =
104
+ implicit def isEnumDecoder [T ](implicit
105
+ isEnum : IsEnum [T ],
106
+ enumerate : Enumerate [T ],
107
+ typeable : Typeable [T ]
108
+ ): DecodeJson [T ] =
110
109
DecodeJson {
111
110
val underlying = DecodeJson .of[String ]
112
- val map = enum ().map(e => isEnum.label(e) -> e).toMap
113
- val name = typeable.describe // TODO split in words
111
+ val map = enumerate ().map(e => isEnum.label(e) -> e).toMap
112
+ val name = typeable.describe // TODO split in words
114
113
115
114
c =>
116
115
underlying(c).flatMap { s =>
117
116
map.get(s) match {
118
- case None => DecodeResult .fail(s " Unrecognized $name: ' $s' " , c.history)
117
+ case None => DecodeResult .fail(s " Unrecognized $name: ' $s' " , c.history)
119
118
case Some (m) => DecodeResult .ok(m)
120
119
}
121
120
}
122
121
}
123
122
124
- implicit val anchorIsEnum = IsEnum .instance[Anchor ](_.label)
125
- implicit val refIsEnum = IsEnum .instance[Ref ](_.label)
126
- implicit val axisAnchorIsEnum = IsEnum .instance[AxisAnchor ](_.label)
127
- implicit val axisReferenceIsEnum = IsEnum .instance[AxisReference ](_.label)
128
- implicit val axisTypeIsEnum = IsEnum .instance[AxisType ](_.label)
129
- implicit val barModeIsEnum = IsEnum .instance[BarMode ](_.label)
130
- implicit val boxModeIsEnum = IsEnum .instance[BoxMode ](_.label)
131
- implicit val dashIsEnum = IsEnum .instance[Dash ](_.label)
132
- implicit val fillIsEnum = IsEnum .instance[Fill ](_.label)
133
- implicit val hoverModeIsEnum = IsEnum .instance[HoverMode ](_.label)
134
- implicit val lineShapeIsEnum = IsEnum .instance[LineShape ](_.label)
135
- implicit val orientationIsEnum = IsEnum .instance[Orientation ](_.label)
136
- implicit val traceOrderIsEnum = IsEnum .instance[TraceOrder ](_.label)
137
- implicit val boxMeanOtherIsEnum = IsEnum .instance[BoxMean .Labeled ](_.label)
138
- implicit val boxPointsOtherIsEnum = IsEnum .instance[BoxPoints .Labeled ](_.label)
139
- implicit val textPositionIsEnum = IsEnum .instance[TextPosition ](_.label)
123
+ implicit val anchorIsEnum = IsEnum .instance[Anchor ](_.label)
124
+ implicit val refIsEnum = IsEnum .instance[Ref ](_.label)
125
+ implicit val axisAnchorIsEnum = IsEnum .instance[AxisAnchor ](_.label)
126
+ implicit val axisReferenceIsEnum = IsEnum .instance[AxisReference ](_.label)
127
+ implicit val axisTypeIsEnum = IsEnum .instance[AxisType ](_.label)
128
+ implicit val barModeIsEnum = IsEnum .instance[BarMode ](_.label)
129
+ implicit val boxModeIsEnum = IsEnum .instance[BoxMode ](_.label)
130
+ implicit val dashIsEnum = IsEnum .instance[Dash ](_.label)
131
+ implicit val fillIsEnum = IsEnum .instance[Fill ](_.label)
132
+ implicit val hoverModeIsEnum = IsEnum .instance[HoverMode ](_.label)
133
+ implicit val lineShapeIsEnum = IsEnum .instance[LineShape ](_.label)
134
+ implicit val orientationIsEnum = IsEnum .instance[Orientation ](_.label)
135
+ implicit val traceOrderIsEnum = IsEnum .instance[TraceOrder ](_.label)
136
+ implicit val boxMeanOtherIsEnum = IsEnum .instance[BoxMean .Labeled ](_.label)
137
+ implicit val boxPointsOtherIsEnum = IsEnum .instance[BoxPoints .Labeled ](_.label)
138
+ implicit val textPositionIsEnum = IsEnum .instance[TextPosition ](_.label)
140
139
implicit val barTextPositionIsEnum = IsEnum .instance[BarTextPosition ](_.label)
141
- implicit val sideIsEnum = IsEnum .instance[Side ](_.label)
142
- implicit val symbolIsEnum = IsEnum .instance[Symbol ](_.label)
143
- implicit val ticksIsEnum = IsEnum .instance[Ticks ](_.label)
144
- implicit val histNormIsEnum = IsEnum .instance[HistNorm ](_.label)
145
- implicit val sizeModeIsEnum = IsEnum .instance[SizeMode ](_.label)
146
- implicit val hoverOnIsEnum = IsEnum .instance[HoverOn ](_.label)
147
- implicit val groupNormIsEnum = IsEnum .instance[GroupNorm ](_.label)
148
- implicit val histFuncIsEnum = IsEnum .instance[HistFunc ](_.label)
149
- implicit val tickModeIsEnum = IsEnum .instance[TickMode ](_.mode)
150
- implicit val patternIsEnum = IsEnum .instance[Pattern ](_.label)
151
- implicit val rowOrderIsEnum = IsEnum .instance[RowOrder ](_.label)
152
- implicit val alignmentIsEnum = IsEnum .instance[Alignment ](_.label)
153
- implicit val colorModelIsEnum = IsEnum .instance[ColorModel ](_.label)
140
+ implicit val sideIsEnum = IsEnum .instance[Side ](_.label)
141
+ implicit val symbolIsEnum = IsEnum .instance[Symbol ](_.label)
142
+ implicit val ticksIsEnum = IsEnum .instance[Ticks ](_.label)
143
+ implicit val histNormIsEnum = IsEnum .instance[HistNorm ](_.label)
144
+ implicit val sizeModeIsEnum = IsEnum .instance[SizeMode ](_.label)
145
+ implicit val hoverOnIsEnum = IsEnum .instance[HoverOn ](_.label)
146
+ implicit val groupNormIsEnum = IsEnum .instance[GroupNorm ](_.label)
147
+ implicit val histFuncIsEnum = IsEnum .instance[HistFunc ](_.label)
148
+ implicit val tickModeIsEnum = IsEnum .instance[TickMode ](_.mode)
149
+ implicit val patternIsEnum = IsEnum .instance[Pattern ](_.label)
150
+ implicit val rowOrderIsEnum = IsEnum .instance[RowOrder ](_.label)
151
+ implicit val alignmentIsEnum = IsEnum .instance[Alignment ](_.label)
152
+ implicit val colorModelIsEnum = IsEnum .instance[ColorModel ](_.label)
154
153
155
154
def jsonSumDirectCodecFor (name : String ): JsonSumCodec = new JsonSumCodec {
156
155
def encodeEmpty : Nothing =
157
156
throw new IllegalArgumentException (s " empty $name" )
158
157
159
158
def encodeField (fieldOrObj : Either [Json , (String , Json )]): Json =
160
159
fieldOrObj match {
161
- case Left (other) => other
160
+ case Left (other) => other
162
161
case Right ((_, content)) => content
163
162
}
164
163
165
164
def decodeEmpty (cursor : HCursor ): DecodeResult [Nothing ] =
166
- // FIXME Sometimes reports the wrong error (in case of two nested sum types)
165
+ // FIXME Sometimes reports the wrong error (in case of two nested sum types)
167
166
DecodeResult .fail(s " unrecognized $name" , cursor.history)
168
167
169
168
def decodeField [A ](name : String , cursor : HCursor , decode : DecodeJson [A ]): DecodeResult [Either [ACursor , A ]] =
@@ -175,7 +174,7 @@ object ArgonautCodecsInternals extends ArgonautCodecsExtra {
175
174
}
176
175
177
176
case class JsonProductObjCodecNoEmpty (
178
- toJsonName : String => String = identity
177
+ toJsonName : String => String = identity
179
178
) extends JsonProductCodec {
180
179
181
180
private val underlying = JsonProductCodec .adapt(toJsonName)
@@ -194,7 +193,12 @@ object ArgonautCodecsInternals extends ArgonautCodecsExtra {
194
193
cursor.history
195
194
)
196
195
197
- def decodeField [A ](name : String , cursor : HCursor , decode : DecodeJson [A ], default : Option [A ]): DecodeResult [(A , ACursor )] = {
196
+ def decodeField [A ](
197
+ name : String ,
198
+ cursor : HCursor ,
199
+ decode : DecodeJson [A ],
200
+ default : Option [A ]
201
+ ): DecodeResult [(A , ACursor )] = {
198
202
val c = cursor.downField(toJsonName(name))
199
203
200
204
def result = c.as(decode).map((_, if (c.succeeded) c.delete else ACursor .ok(cursor)))
@@ -219,18 +223,18 @@ object ArgonautCodecsInternals extends ArgonautCodecsExtra {
219
223
implicit val decodeHoverInfo : DecodeJson [HoverInfo ] =
220
224
DecodeJson { c =>
221
225
DecodeJson .of[String ].apply(c).flatMap {
222
- case " all" => DecodeResult .ok(HoverInfo .All )
226
+ case " all" => DecodeResult .ok(HoverInfo .All )
223
227
case " skip" => DecodeResult .ok(HoverInfo .Skip )
224
228
case " none" => DecodeResult .ok(HoverInfo .None )
225
229
case combination =>
226
230
val results = combination.split('+' ).map {
227
- case " x" => Right (HoverInfo .X )
228
- case " y" => Right (HoverInfo .Y )
229
- case " z" => Right (HoverInfo .Z )
231
+ case " x" => Right (HoverInfo .X )
232
+ case " y" => Right (HoverInfo .Y )
233
+ case " z" => Right (HoverInfo .Z )
230
234
case " color" => Right (HoverInfo .Color )
231
- case " text" => Right (HoverInfo .Text )
232
- case " name" => Right (HoverInfo .Name )
233
- case other => Left (s " Unrecognized hover info element: $other" )
235
+ case " text" => Right (HoverInfo .Text )
236
+ case " name" => Right (HoverInfo .Name )
237
+ case other => Left (s " Unrecognized hover info element: $other" )
234
238
}
235
239
if (results.exists(_.isLeft))
236
240
DecodeResult .fail(
@@ -242,7 +246,6 @@ object ArgonautCodecsInternals extends ArgonautCodecsExtra {
242
246
}
243
247
}
244
248
245
-
246
249
implicit def defaultJsonProductCodecFor [T ]: JsonProductCodecFor [T ] =
247
250
JsonProductCodecFor (JsonProductObjCodecNoEmpty .default)
248
251
@@ -256,9 +259,9 @@ object ArgonautCodecsInternals extends ArgonautCodecsExtra {
256
259
s.stripPrefix(" rgba(" ).stripSuffix(" )" ).split(',' ).map(_.trim) match {
257
260
case Array (rStr, gStr, bStr, alphaStr) =>
258
261
val res = for {
259
- r <- Try (rStr.toInt).toOption
260
- g <- Try (gStr.toInt).toOption
261
- b <- Try (bStr.toInt).toOption
262
+ r <- Try (rStr.toInt).toOption
263
+ g <- Try (gStr.toInt).toOption
264
+ b <- Try (bStr.toInt).toOption
262
265
alpha <- Try (alphaStr.toDouble).toOption
263
266
} yield DecodeResult .ok(Color .RGBA (r, g, b, alpha))
264
267
@@ -279,15 +282,14 @@ object ArgonautCodecsInternals extends ArgonautCodecsExtra {
279
282
implicit val decodeStringColor : DecodeJson [Color .StringColor ] =
280
283
DecodeJson {
281
284
val underlying = DecodeJson .of[String ]
282
- val map = Color .StringColor .colors
283
- .toVector
285
+ val map = Color .StringColor .colors.toVector
284
286
.map(c => c -> Color .StringColor (c))
285
287
.toMap
286
288
287
289
c =>
288
290
underlying(c).flatMap { s =>
289
291
map.get(s) match {
290
- case None => DecodeResult .fail(s " Unrecognized color: ' $s' " , c.history)
292
+ case None => DecodeResult .fail(s " Unrecognized color: ' $s' " , c.history)
291
293
case Some (m) => DecodeResult .ok(m)
292
294
}
293
295
}
@@ -340,25 +342,21 @@ object ArgonautCodecsInternals extends ArgonautCodecsExtra {
340
342
DecodeResult .fail(s " Unrecognized RGB color: $other" , c.history)
341
343
}
342
344
343
- asString
344
- .toOption
345
+ asString.toOption
345
346
.orElse(asInt.toOption)
346
347
.fold(asHexa)(DecodeResult .ok)
347
348
}
348
349
349
350
private def decodeNum (s : String ) = {
350
351
351
- val intOpt = Try (s.toInt)
352
- .toOption
352
+ val intOpt = Try (s.toInt).toOption
353
353
354
- val fromDouble = Try (s.toDouble)
355
- .toOption
354
+ val fromDouble = Try (s.toDouble).toOption
356
355
.map(_.toInt)
357
356
358
357
def fromPct =
359
358
if (s.endsWith(" %" ))
360
- Try (s.stripSuffix(" %" ).trim.toDouble)
361
- .toOption
359
+ Try (s.stripSuffix(" %" ).trim.toDouble).toOption
362
360
.map(v => (256 * v).toInt)
363
361
else
364
362
None
@@ -457,12 +455,12 @@ object ArgonautCodecsInternals extends ArgonautCodecsExtra {
457
455
implicit val encodeError : EncodeJson [Error ] =
458
456
EncodeJson { error =>
459
457
val json = error match {
460
- case data : Error .Data => data.asJson
461
- case pct : Error .Percent => pct.asJson
458
+ case data : Error .Data => data.asJson
459
+ case pct : Error .Percent => pct.asJson
462
460
case cst : Error .Constant => cst.asJson
463
461
}
464
462
465
- json.obj.fold(json)(o => Json .jObject((" type" -> error.`type`.asJson) +: o))
463
+ json.obj.fold(json)(o => Json .jObject((" type" -> error.`type`.asJson) +: o))
466
464
}
467
465
468
466
implicit val decodeError : DecodeJson [Error ] =
@@ -488,15 +486,13 @@ object ArgonautCodecsInternals extends ArgonautCodecsExtra {
488
486
implicit val jsonSumCodecForColor : JsonSumCodecFor [Color ] =
489
487
JsonSumCodecFor (jsonSumDirectCodecFor(" color" ))
490
488
491
-
492
489
case class WrappedFont (font : Font )
493
- val derivedFontDecoder = MkDecodeJson [Font ].decodeJson
490
+ val derivedFontDecoder = MkDecodeJson [Font ].decodeJson
494
491
lazy val wrappedFontDecoder = DecodeJson .of[WrappedFont ].map(_.font)
495
492
496
493
implicit lazy val decodeFont : DecodeJson [Font ] =
497
- DecodeJson {
498
- c =>
499
- wrappedFontDecoder(c).toOption.fold(derivedFontDecoder(c))(DecodeResult .ok)
494
+ DecodeJson { c =>
495
+ wrappedFontDecoder(c).toOption.fold(derivedFontDecoder(c))(DecodeResult .ok)
500
496
}
501
497
502
498
implicit val jsonCodecForTrace = JsonSumCodecFor [Trace ](
0 commit comments