package io.qdb.kvstore; import com.owlike.genson.Genson; import com.owlike.genson.TransformationException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Map; /** * Serializes to/from JSON using Genson. */ public class GensonSerializer implements KeyValueStoreSerializer { private final Genson genson; private final Genson gensonPretty; public GensonSerializer(Map<String, Class> aliases) { Genson.Builder b = new Genson.Builder().setSkipNull(true); b.addAlias("tx", StoreTx.class); for (Map.Entry<String, Class> e : aliases.entrySet()) b.addAlias(e.getKey(), e.getValue()); genson = b.create(); gensonPretty = b.useIndentation(true).create(); } @Override public void serialize(Object value, boolean pretty, OutputStream out) throws IOException { try { if (pretty) { gensonPretty.serialize(value, out); } else { genson.serialize(value, out); } } catch (TransformationException e) { throw new IOException(e.toString(), e); } } @Override public <T> T deserialize(InputStream in, Class<T> cls) throws IOException { try { return genson.deserialize(in, cls); } catch (TransformationException e) { throw new IOException(e.toString(), e); } } }