blob: eb9fd0618e9d244d1838d08913c9489ec87c120c [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
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -07006import org.onlab.util.KryoNamespace.FamilySerializer;
Yuta HIGUCHI533ec322014-09-30 13:29:52 -07007
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
Yuta HIGUCHI03fec1f2014-10-03 09:13:50 -070021 /**
22 * Creates {@link ImmutableSet} serializer instance.
23 */
Yuta HIGUCHI533ec322014-09-30 13:29:52 -070024 public ImmutableSetSerializer() {
25 // non-null, immutable
26 super(false, true);
27 }
28
29 @Override
30 public void write(Kryo kryo, Output output, ImmutableSet<?> object) {
31 kryo.writeObject(output, object.asList(), serializer);
32 }
33
34 @Override
35 public ImmutableSet<?> read(Kryo kryo, Input input,
36 Class<ImmutableSet<?>> type) {
37 List<?> elms = kryo.readObject(input, ArrayList.class, serializer);
38 return ImmutableSet.copyOf(elms);
39 }
40
41 @Override
42 public void registerFamilies(Kryo kryo) {
43 kryo.register(ImmutableSet.of().getClass(), this);
44 kryo.register(ImmutableSet.of(1).getClass(), this);
45 kryo.register(ImmutableSet.of(1, 2).getClass(), this);
46 // TODO register required ImmutableSet variants
47 }
48}