blob: c08bf9a0849683370d550eba4dbcdc4ccb75b6d1 [file] [log] [blame]
Yuta HIGUCHI533ec322014-09-30 13:29:52 -07001package org.onlab.onos.store.serializers;
2
3import java.util.ArrayList;
4import java.util.List;
5
6import org.onlab.util.KryoPool.FamilySerializer;
7
8import com.esotericsoftware.kryo.Kryo;
9import com.esotericsoftware.kryo.io.Input;
10import com.esotericsoftware.kryo.io.Output;
11import com.esotericsoftware.kryo.serializers.CollectionSerializer;
12import com.google.common.collect.ImmutableSet;
13
14/**
15* Kryo Serializer for {@link ImmutableSet}.
16*/
17public class ImmutableSetSerializer extends FamilySerializer<ImmutableSet<?>> {
18
19 private final CollectionSerializer serializer = new CollectionSerializer();
20
21 public ImmutableSetSerializer() {
22 // non-null, immutable
23 super(false, true);
24 }
25
26 @Override
27 public void write(Kryo kryo, Output output, ImmutableSet<?> object) {
28 kryo.writeObject(output, object.asList(), serializer);
29 }
30
31 @Override
32 public ImmutableSet<?> read(Kryo kryo, Input input,
33 Class<ImmutableSet<?>> type) {
34 List<?> elms = kryo.readObject(input, ArrayList.class, serializer);
35 return ImmutableSet.copyOf(elms);
36 }
37
38 @Override
39 public void registerFamilies(Kryo kryo) {
40 kryo.register(ImmutableSet.of().getClass(), this);
41 kryo.register(ImmutableSet.of(1).getClass(), this);
42 kryo.register(ImmutableSet.of(1, 2).getClass(), this);
43 // TODO register required ImmutableSet variants
44 }
45}