package com.github.msemys.esjc; import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; import java.io.IOException; public class SystemSettingsJsonAdapter extends TypeAdapter<SystemSettings> { private static final String USER_STREAM_ACL = "$userStreamAcl"; private static final String SYSTEM_STREAM_ACL = "$systemStreamAcl"; private final StreamAclJsonAdapter streamAclJsonAdapter = new StreamAclJsonAdapter(); @Override public void write(JsonWriter writer, SystemSettings value) throws IOException { writer.beginObject(); if (value.userStreamAcl != null) { writer.name(USER_STREAM_ACL); streamAclJsonAdapter.write(writer, value.userStreamAcl); } if (value.systemStreamAcl != null) { writer.name(SYSTEM_STREAM_ACL); streamAclJsonAdapter.write(writer, value.systemStreamAcl); } writer.endObject(); } @Override public SystemSettings read(JsonReader reader) throws IOException { if (reader.peek() == JsonToken.NULL) { return null; } SystemSettings.Builder builder = SystemSettings.newBuilder(); reader.beginObject(); while (reader.peek() != JsonToken.END_OBJECT && reader.hasNext()) { String name = reader.nextName(); switch (name) { case USER_STREAM_ACL: builder.userStreamAcl(streamAclJsonAdapter.read(reader)); break; case SYSTEM_STREAM_ACL: builder.systemStreamAcl(streamAclJsonAdapter.read(reader)); break; } } reader.endObject(); return builder.build(); } }