@@ -19,17 +19,19 @@ package com.twitter.chill
19
19
import com .twitter .bijection .Injection
20
20
import com .twitter .bijection .{ Bufferable , Bijection , ImplicitBijection , Injection }
21
21
22
+ import scala .reflect .ClassTag
23
+
22
24
object BijectionEnrichedKryo {
23
25
implicit def enrich (k : Kryo ): BijectionEnrichedKryo = new BijectionEnrichedKryo (k)
24
26
25
27
/**
26
28
* Use a bijection[A,B] then the KSerializer on B
27
29
*/
28
- def viaBijection [A , B ](kser : KSerializer [B ])(implicit bij : ImplicitBijection [A , B ], cmf : ClassManifest [B ]): KSerializer [A ] =
30
+ def viaBijection [A , B ](kser : KSerializer [B ])(implicit bij : ImplicitBijection [A , B ], cmf : ClassTag [B ]): KSerializer [A ] =
29
31
new KSerializer [A ] {
30
32
def write (k : Kryo , out : Output , obj : A ) { kser.write(k, out, bij(obj)) }
31
33
def read (k : Kryo , in : Input , cls : Class [A ]) =
32
- bij.invert(kser.read(k, in, cmf.erasure .asInstanceOf [Class [B ]]))
34
+ bij.invert(kser.read(k, in, cmf.runtimeClass .asInstanceOf [Class [B ]]))
33
35
}
34
36
35
37
def viaBufferable [T ](implicit b : Bufferable [T ]): KSerializer [T ] =
@@ -38,32 +40,32 @@ object BijectionEnrichedKryo {
38
40
39
41
class BijectionEnrichedKryo (k : Kryo ) {
40
42
41
- def injectionForClass [T ](implicit inj : Injection [T , Array [Byte ]], cmf : ClassManifest [T ]): Kryo = {
42
- k.register(cmf.erasure , InjectiveSerializer .asKryo[T ])
43
+ def injectionForClass [T ](implicit inj : Injection [T , Array [Byte ]], cmf : ClassTag [T ]): Kryo = {
44
+ k.register(cmf.runtimeClass , InjectiveSerializer .asKryo[T ])
43
45
k
44
46
}
45
47
46
- def injectionForSubclass [T ](implicit inj : Injection [T , Array [Byte ]], cmf : ClassManifest [T ]): Kryo = {
47
- k.addDefaultSerializer(cmf.erasure , InjectiveSerializer .asKryo[T ])
48
+ def injectionForSubclass [T ](implicit inj : Injection [T , Array [Byte ]], cmf : ClassTag [T ]): Kryo = {
49
+ k.addDefaultSerializer(cmf.runtimeClass , InjectiveSerializer .asKryo[T ])
48
50
k
49
51
}
50
52
51
- def bufferableForClass [T ](implicit b : Bufferable [T ], cmf : ClassManifest [T ]): Kryo = {
52
- k.register(cmf.erasure , BijectionEnrichedKryo .viaBufferable[T ])
53
+ def bufferableForClass [T ](implicit b : Bufferable [T ], cmf : ClassTag [T ]): Kryo = {
54
+ k.register(cmf.runtimeClass , BijectionEnrichedKryo .viaBufferable[T ])
53
55
k
54
56
}
55
57
56
58
/**
57
59
* B has to already be registered, then use the KSerializer[B] to create KSerialzer[A]
58
60
*/
59
- def forClassViaBijection [A , B ](implicit bij : ImplicitBijection [A , B ], acmf : ClassManifest [A ], bcmf : ClassManifest [B ]): Kryo = {
60
- val kserb = k.getSerializer(bcmf.erasure ).asInstanceOf [KSerializer [B ]]
61
- k.register(acmf.erasure , BijectionEnrichedKryo .viaBijection[A , B ](kserb))
61
+ def forClassViaBijection [A , B ](implicit bij : ImplicitBijection [A , B ], acmf : ClassTag [A ], bcmf : ClassTag [B ]): Kryo = {
62
+ val kserb = k.getSerializer(bcmf.runtimeClass ).asInstanceOf [KSerializer [B ]]
63
+ k.register(acmf.runtimeClass , BijectionEnrichedKryo .viaBijection[A , B ](kserb))
62
64
k
63
65
}
64
66
65
67
/** Helpful override to alleviate rewriting types. */
66
- def forClassViaBijection [A , B ](bij : Bijection [A , B ])(implicit acmf : ClassManifest [A ], bcmf : ClassManifest [B ]): Kryo = {
68
+ def forClassViaBijection [A , B ](bij : Bijection [A , B ])(implicit acmf : ClassTag [A ], bcmf : ClassTag [B ]): Kryo = {
67
69
implicit def implicitBij = bij
68
70
this .forClassViaBijection[A , B ]
69
71
}
0 commit comments