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; class MessageFieldMapper extends FieldMapper { final MessageMapper mapper; public MessageFieldMapper(FieldDescriptor field, MessageMapper mapper) { super(field); this.mapper = mapper; } @Override public void writeValue(Object o, ProtobufWriter json) throws IOException { Message msg = (Message) o; mapper.write(msg, json); } @Override public void read(Message.Builder dest, JsonReader json) throws IOException { switch (json.peek()) { case NULL: json.nextNull(); break; case BEGIN_OBJECT: Message.Builder builder = dest.newBuilderForField(field); mapper.read(builder, json); dest.setField(field, builder); break; default: throw new IOException("Expected object"); } } @Override public Object readValue(JsonReader json) throws IOException { throw new UnsupportedOperationException(); } }