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

io.bitsensor.lib.jackson.protobuf.ProtobufModule Maven / Gradle / Ivy

The newest version!
package io.bitsensor.lib.jackson.protobuf;

import io.bitsensor.plugins.shaded.com.fasterxml.jackson.annotation.JsonAutoDetect;
import io.bitsensor.plugins.shaded.com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
import io.bitsensor.plugins.shaded.com.fasterxml.jackson.core.Version;
import io.bitsensor.plugins.shaded.com.fasterxml.jackson.databind.Module;
import io.bitsensor.plugins.shaded.com.fasterxml.jackson.databind.module.SimpleSerializers;
import io.bitsensor.proto.shaded.io.bitsensor.proto.shaded.com.google.protobuf.MessageOrBuilder;
import io.bitsensor.proto.shaded.io.bitsensor.proto.shaded.com.google.protobuf.util.JsonFormat;
import io.bitsensor.proto.shaded.io.bitsensor.proto.shaded.com.google.protobuf.util.JsonFormat.Parser;
import io.bitsensor.proto.shaded.io.bitsensor.proto.shaded.com.google.protobuf.util.JsonFormat.Printer;

/**
 * Protobuf Jackson module adapted to work with shaded protobuf message.
 *
 * @see Jackson datatype protobuf - HubSpot
 */
public class ProtobufModule extends Module {
    private final Printer printer;
    private final Parser parser;

    public ProtobufModule() {
        this(JsonFormat.printer());
    }

    public ProtobufModule(Printer printer) {
        this(printer, JsonFormat.parser());
    }

    public ProtobufModule(Parser parser) {
        this(JsonFormat.printer(), parser);
    }

    public ProtobufModule(Printer printer, Parser parser) {
        this.printer = printer;
        this.parser = parser;
    }

    @Override
    public String getModuleName() {
        return "ProtobufModule";
    }

    @Override
    public Version version() {
        return ModuleVersion.instance.version();
    }

    @Override
    public void setupModule(SetupContext context) {
        SimpleSerializers serializers = new SimpleSerializers();
        serializers.addSerializer(new ProtobufSerializer(printer));

        context.addSerializers(serializers);
        context.addDeserializers(new ProtobufDeserializerFactory(parser));
        context.setMixInAnnotations(MessageOrBuilder.class, MessageOrBuilderMixin.class);
    }

    @JsonAutoDetect(getterVisibility = Visibility.NONE,
            isGetterVisibility = Visibility.NONE,
            setterVisibility = Visibility.NONE,
            creatorVisibility = Visibility.NONE,
            fieldVisibility = Visibility.NONE)
    private static class MessageOrBuilderMixin {
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy