Skip to content

Commit dc5aaca

Browse files
authored
optimize map and contramap (sksamuel#878)
1 parent e9c5772 commit dc5aaca

2 files changed

Lines changed: 7 additions & 3 deletions

File tree

avro4s-core/src/main/scala/com/sksamuel/avro4s/Decoder.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ trait Decoder[T] extends Serializable {
1919
def decode(schema: Schema): Any => T
2020

2121
final def map[U](f: T => U): Decoder[U] = new Decoder[U] {
22-
override def decode(schema: Schema): Any => U = { input =>
23-
f(self.decode(schema).apply(input))
22+
override def decode(schema: Schema): Any => U = {
23+
val decode = self.decode(schema)
24+
input => f(decode(input))
2425
}
2526
}
2627
}

avro4s-core/src/main/scala/com/sksamuel/avro4s/Encoder.scala

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,10 @@ trait Encoder[T] extends Serializable {
4848
* to an T, before encoding as an T using this encoder.
4949
*/
5050
final def contramap[U](f: U => T): Encoder[U] = new Encoder[U] {
51-
override def encode(schema: Schema): U => AnyRef = { u => self.encode(schema).apply(f(u)) }
51+
override def encode(schema: Schema): U => AnyRef = {
52+
val encode = self.encode(schema)
53+
u => encode(f(u))
54+
}
5255
}
5356
}
5457

0 commit comments

Comments
 (0)