All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.dongliu.prettypb.runtime.code.object.MessageProtoFieldInfo Maven / Gradle / Ivy

There is a newer version: 0.3.5
Show newest version
package net.dongliu.prettypb.runtime.code.object;

import net.dongliu.prettypb.runtime.ExtensionRegistry;
import net.dongliu.prettypb.runtime.ProtoBufDecoder;
import net.dongliu.prettypb.runtime.ProtoBufEncoder;
import net.dongliu.prettypb.runtime.code.ProtoBufReader;
import net.dongliu.prettypb.runtime.include.ProtoField;
import net.dongliu.prettypb.runtime.include.ProtoType;
import net.dongliu.prettypb.runtime.code.ProtoBufWriter;
import net.dongliu.prettypb.runtime.code.ObjectProtoFieldInfo;

import java.io.IOException;
import java.lang.reflect.Field;

/**
 * @author Dong Liu
 */
public class MessageProtoFieldInfo extends ObjectProtoFieldInfo {

    public MessageProtoFieldInfo(Field field, Field helperField, ProtoField protoField) {
        super(field, helperField, protoField);
    }

    @Override
    protected void serializeFieldInternal(Object value, ProtoBufWriter protoBufWriter)
            throws IOException {
        protoBufWriter.encodeTag(ProtoType.Message, idx());
        protoBufWriter.writeBytes(ProtoBufEncoder.toBytes(value, (Class) value.getClass()));
    }

    @Override
    protected Object deSerializeFieldInternal(ProtoBufReader protoBufReader,
                                              ExtensionRegistry extensionRegistry)
            throws IOException {
        byte[] bytes = protoBufReader.readBytes();
        return ProtoBufDecoder.fromBytes(clazz, bytes, extensionRegistry);
    }
}