package io.fathom.cloud.protobuf.mapper; import java.io.IOException; import com.google.gson.stream.JsonReader; import com.google.protobuf.Descriptors.FieldDescriptor; import com.google.protobuf.Message; import com.google.protobuf.Message.Builder; abstract class FieldMapper { public final FieldDescriptor field; public final String jsonName; public FieldMapper(FieldDescriptor field) { this.field = field; this.jsonName = field.getName(); } public void write(Message src, ProtobufWriter json) throws IOException { if (src.hasField(field)) { Object value = src.getField(field); if (value != null) { json.name(jsonName); writeValue(value, json); } } } public abstract void writeValue(Object o, ProtobufWriter json) throws IOException; public void read(Builder dest, JsonReader json) throws IOException { switch (json.peek()) { case NULL: json.nextNull(); break; default: Object o = readValue(json); dest.setField(field, o); break; } } public abstract Object readValue(JsonReader json) throws IOException; }