Skip to content

Commit 4276c36

Browse files
committed
Deduplicate customEvent method code
1 parent 3982060 commit 4276c36

File tree

1 file changed

+29
-64
lines changed

1 file changed

+29
-64
lines changed
Lines changed: 29 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,59 @@
11
package com.avsystem.commons
22
package serialization
33

4+
trait AcceptsAdditionalCustomMarkers extends AcceptsCustomEvents {
5+
6+
protected def markers: Set[CustomEventMarker[_]]
7+
8+
override def customEvent[T](marker: CustomEventMarker[T], event: T): Boolean =
9+
marker match {
10+
case marker if markers(marker) => true
11+
case _ => super.customEvent(marker, event)
12+
}
13+
}
14+
415
/**
516
* [[Input]] implementation that adds additional markers [[CustomEventMarker]] to the provided [[Input]] instance
617
*/
718
final class CustomMarkersInputWrapper(
819
override protected val wrapped: Input,
9-
markers: Set[CustomEventMarker[_]],
10-
) extends InputWrapper {
20+
override protected val markers: Set[CustomEventMarker[_]],
21+
) extends InputWrapper with AcceptsAdditionalCustomMarkers {
1122

1223
override def readList(): ListInput =
1324
new CustomMarkersInputWrapper.AdjustedListInput(super.readList(), markers)
1425

1526
override def readObject(): ObjectInput =
1627
new CustomMarkersInputWrapper.AdjustedObjectInput(super.readObject(), markers)
17-
18-
override def customEvent[T](marker: CustomEventMarker[T], value: T): Boolean =
19-
marker match {
20-
case marker if markers(marker) => true
21-
case _ => super.customEvent(marker, value)
22-
}
2328
}
2429
object CustomMarkersInputWrapper {
2530
def apply(input: Input, markers: CustomEventMarker[_]*): CustomMarkersInputWrapper =
2631
new CustomMarkersInputWrapper(input, markers.toSet)
2732

2833
private final class AdjustedListInput(
2934
override protected val wrapped: ListInput,
30-
markers: Set[CustomEventMarker[_]],
31-
) extends ListInputWrapper {
35+
override protected val markers: Set[CustomEventMarker[_]],
36+
) extends ListInputWrapper with AcceptsAdditionalCustomMarkers {
3237
override def nextElement(): Input = new CustomMarkersInputWrapper(super.nextElement(), markers)
33-
override def customEvent[T](marker: CustomEventMarker[T], value: T): Boolean =
34-
marker match {
35-
case marker if markers(marker) => true
36-
case _ => super.customEvent(marker, value)
37-
}
3838
}
3939

4040
private final class AdjustedFieldInput(
4141
override protected val wrapped: FieldInput,
42-
markers: Set[CustomEventMarker[_]],
43-
) extends FieldInputWrapper {
42+
override protected val markers: Set[CustomEventMarker[_]],
43+
) extends FieldInputWrapper with AcceptsAdditionalCustomMarkers {
4444

4545
override def readList(): ListInput = new AdjustedListInput(super.readList(), markers)
4646
override def readObject(): ObjectInput = new AdjustedObjectInput(super.readObject(), markers)
47-
48-
override def customEvent[T](marker: CustomEventMarker[T], value: T): Boolean =
49-
marker match {
50-
case marker if markers(marker) => true
51-
case _ => super.customEvent(marker, value)
52-
}
5347
}
5448

5549
private final class AdjustedObjectInput(
5650
override protected val wrapped: ObjectInput,
57-
markers: Set[CustomEventMarker[_]],
58-
) extends ObjectInputWrapper {
51+
override protected val markers: Set[CustomEventMarker[_]],
52+
) extends ObjectInputWrapper with AcceptsAdditionalCustomMarkers {
5953

6054
override def nextField(): FieldInput = new AdjustedFieldInput(super.nextField(), markers)
61-
6255
override def peekField(name: String): Opt[FieldInput] =
6356
super.peekField(name).map(new AdjustedFieldInput(_, markers))
64-
65-
override def customEvent[T](marker: CustomEventMarker[T], value: T): Boolean =
66-
marker match {
67-
case marker if markers(marker) => true
68-
case _ => super.customEvent(marker, value)
69-
}
7057
}
7158
}
7259

@@ -75,8 +62,8 @@ object CustomMarkersInputWrapper {
7562
*/
7663
final class CustomMarkersOutputWrapper(
7764
override protected val wrapped: Output,
78-
markers: Set[CustomEventMarker[_]],
79-
) extends OutputWrapper {
65+
override protected val markers: Set[CustomEventMarker[_]],
66+
) extends OutputWrapper with AcceptsAdditionalCustomMarkers {
8067

8168
override def writeSimple(): SimpleOutput =
8269
new CustomMarkersOutputWrapper.AdjustedSimpleOutput(super.writeSimple(), markers)
@@ -86,12 +73,6 @@ final class CustomMarkersOutputWrapper(
8673

8774
override def writeObject(): ObjectOutput =
8875
new CustomMarkersOutputWrapper.AdjustedObjectOutput(super.writeObject(), markers)
89-
90-
override def customEvent[T](marker: CustomEventMarker[T], value: T): Boolean =
91-
marker match {
92-
case marker if markers(marker) => true
93-
case _ => super.customEvent(marker, value)
94-
}
9576
}
9677

9778
object CustomMarkersOutputWrapper {
@@ -100,40 +81,24 @@ object CustomMarkersOutputWrapper {
10081

10182
private final class AdjustedSimpleOutput(
10283
override protected val wrapped: SimpleOutput,
103-
markers: Set[CustomEventMarker[_]],
104-
) extends SimpleOutputWrapper {
105-
override def customEvent[T](marker: CustomEventMarker[T], value: T): Boolean =
106-
marker match {
107-
case marker if markers(marker) => true
108-
case _ => super.customEvent(marker, value)
109-
}
110-
}
84+
override protected val markers: Set[CustomEventMarker[_]],
85+
) extends SimpleOutputWrapper with AcceptsAdditionalCustomMarkers
11186

11287
private final class AdjustedListOutput(
11388
override protected val wrapped: ListOutput,
114-
markers: Set[CustomEventMarker[_]],
115-
) extends ListOutputWrapper {
89+
override protected val markers: Set[CustomEventMarker[_]],
90+
) extends ListOutputWrapper with AcceptsAdditionalCustomMarkers {
91+
11692
override def writeElement(): Output =
11793
new CustomMarkersOutputWrapper(super.writeElement(), markers)
118-
119-
override def customEvent[T](marker: CustomEventMarker[T], value: T): Boolean =
120-
marker match {
121-
case marker if markers(marker) => true
122-
case _ => super.customEvent(marker, value)
123-
}
12494
}
12595

12696
private final class AdjustedObjectOutput(
12797
override protected val wrapped: ObjectOutput,
128-
markers: Set[CustomEventMarker[_]],
129-
) extends ObjectOutputWrapper {
98+
override protected val markers: Set[CustomEventMarker[_]],
99+
) extends ObjectOutputWrapper with AcceptsAdditionalCustomMarkers {
100+
130101
override def writeField(key: String): Output =
131102
new CustomMarkersOutputWrapper(super.writeField(key), markers)
132-
133-
override def customEvent[T](marker: CustomEventMarker[T], value: T): Boolean =
134-
marker match {
135-
case marker if markers(marker) => true
136-
case _ => super.customEvent(marker, value)
137-
}
138103
}
139104
}

0 commit comments

Comments
 (0)