Skip to content

Commit

Permalink
Pass config to all serializers
Browse files Browse the repository at this point in the history
  • Loading branch information
jhaber committed Jul 11, 2023
1 parent ea45ad7 commit 2fd2a54
Show file tree
Hide file tree
Showing 12 changed files with 106 additions and 56 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import com.google.protobuf.ExtensionRegistry;

public class ProtobufJacksonConfig {
private static final ProtobufJacksonConfig DEFAULT_INSTANCE = ProtobufJacksonConfig.builder().build();

private final ExtensionRegistryWrapper extensionRegistry;
private final boolean acceptLiteralFieldnames;

Expand All @@ -11,6 +13,10 @@ private ProtobufJacksonConfig(ExtensionRegistryWrapper extensionRegistry, boolea
this.acceptLiteralFieldnames = acceptLiteralFieldnames;
}

public static ProtobufJacksonConfig getDefaultInstance() {
return DEFAULT_INSTANCE;
}

public static Builder builder() {
return new Builder();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public class ProtobufModule extends Module {
private final ProtobufJacksonConfig config;

public ProtobufModule() {
this(ProtobufJacksonConfig.builder().build());
this(ProtobufJacksonConfig.getDefaultInstance());
}

/**
Expand Down Expand Up @@ -82,22 +82,22 @@ public Version version() {
public void setupModule(SetupContext context) {
SimpleSerializers serializers = new SimpleSerializers();
serializers.addSerializer(new MessageSerializer(config));
serializers.addSerializer(new DurationSerializer());
serializers.addSerializer(new FieldMaskSerializer());
serializers.addSerializer(new ListValueSerializer());
serializers.addSerializer(new NullValueSerializer());
serializers.addSerializer(new StructSerializer());
serializers.addSerializer(new TimestampSerializer());
serializers.addSerializer(new ValueSerializer());
serializers.addSerializer(new WrappedPrimitiveSerializer<>(DoubleValue.class));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(FloatValue.class));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(Int64Value.class));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(UInt64Value.class));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(Int32Value.class));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(UInt32Value.class));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(BoolValue.class));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(StringValue.class));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(BytesValue.class));
serializers.addSerializer(new DurationSerializer(config));
serializers.addSerializer(new FieldMaskSerializer(config));
serializers.addSerializer(new ListValueSerializer(config));
serializers.addSerializer(new NullValueSerializer(config));
serializers.addSerializer(new StructSerializer(config));
serializers.addSerializer(new TimestampSerializer(config));
serializers.addSerializer(new ValueSerializer(config));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(DoubleValue.class, config));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(FloatValue.class, config));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(Int64Value.class, config));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(UInt64Value.class, config));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(Int32Value.class, config));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(UInt32Value.class, config));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(BoolValue.class, config));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(StringValue.class, config));
serializers.addSerializer(new WrappedPrimitiveSerializer<>(BytesValue.class, config));

context.addSerializers(serializers);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,6 @@

import static java.lang.String.format;

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
Expand All @@ -20,15 +15,26 @@
import com.google.protobuf.Message;
import com.google.protobuf.MessageOrBuilder;
import com.google.protobuf.NullValue;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public abstract class ProtobufSerializer<T extends MessageOrBuilder> extends StdSerializer<T> {
private static final String NULL_VALUE_FULL_NAME = NullValue.getDescriptor().getFullName();

private final ProtobufJacksonConfig config;
private final Map<Class<?>, JsonSerializer<Object>> serializerCache;

@Deprecated
public ProtobufSerializer(Class<T> protobufType) {
this(protobufType, ProtobufJacksonConfig.getDefaultInstance());
}

public ProtobufSerializer(Class<T> protobufType, ProtobufJacksonConfig config) {
super(protobufType);

this.config = config;
this.serializerCache = new ConcurrentHashMap<>();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
package com.hubspot.jackson.datatype.protobuf.builtin.serializers;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.google.protobuf.Duration;
import com.google.protobuf.util.Durations;
import com.hubspot.jackson.datatype.protobuf.ProtobufJacksonConfig;
import com.hubspot.jackson.datatype.protobuf.ProtobufSerializer;
import java.io.IOException;

public class DurationSerializer extends ProtobufSerializer<Duration> {

@Deprecated
public DurationSerializer() {
super(Duration.class);
this(ProtobufJacksonConfig.getDefaultInstance());
}

public DurationSerializer(ProtobufJacksonConfig config) {
super(Duration.class, config);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
package com.hubspot.jackson.datatype.protobuf.builtin.serializers;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.FieldMaskUtil;
import com.hubspot.jackson.datatype.protobuf.ProtobufJacksonConfig;
import com.hubspot.jackson.datatype.protobuf.ProtobufSerializer;
import java.io.IOException;

public class FieldMaskSerializer extends ProtobufSerializer<FieldMask> {

@Deprecated
public FieldMaskSerializer() {
super(FieldMask.class);
this(ProtobufJacksonConfig.getDefaultInstance());
}

public FieldMaskSerializer(ProtobufJacksonConfig config) {
super(FieldMask.class, config);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
package com.hubspot.jackson.datatype.protobuf.builtin.serializers;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.google.protobuf.Descriptors.FieldDescriptor;
import com.google.protobuf.ListValue;
import com.google.protobuf.Value;
import com.hubspot.jackson.datatype.protobuf.ProtobufJacksonConfig;
import com.hubspot.jackson.datatype.protobuf.ProtobufSerializer;
import java.io.IOException;

public class ListValueSerializer extends ProtobufSerializer<ListValue> {
private static final FieldDescriptor VALUES_FIELD = ListValue.getDescriptor().findFieldByName("values");

@Deprecated
public ListValueSerializer() {
super(ListValue.class);
this(ProtobufJacksonConfig.getDefaultInstance());
}

public ListValueSerializer(ProtobufJacksonConfig config) {
super(ListValue.class, config);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
package com.hubspot.jackson.datatype.protobuf.builtin.serializers;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;

import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializationFeature;
Expand All @@ -23,8 +16,13 @@
import com.hubspot.jackson.datatype.protobuf.ProtobufJacksonConfig;
import com.hubspot.jackson.datatype.protobuf.ProtobufSerializer;
import com.hubspot.jackson.datatype.protobuf.internal.PropertyNamingCache;

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;

public class MessageSerializer extends ProtobufSerializer<MessageOrBuilder> {
@SuppressFBWarnings(value="SE_BAD_FIELD")
Expand All @@ -45,7 +43,7 @@ public MessageSerializer(ProtobufJacksonConfig config) {
}

private MessageSerializer(ProtobufJacksonConfig config, boolean unwrappingSerializer) {
super(MessageOrBuilder.class);
super(MessageOrBuilder.class, config);
this.config = config;
this.unwrappingSerializer = unwrappingSerializer;
this.propertyNamingCache = new ConcurrentHashMap<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package com.hubspot.jackson.datatype.protobuf.builtin.serializers;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import com.google.protobuf.NullValue;
import com.hubspot.jackson.datatype.protobuf.ProtobufJacksonConfig;
import java.io.IOException;

public class NullValueSerializer extends StdSerializer<NullValue> {

@Deprecated
public NullValueSerializer() {
this(ProtobufJacksonConfig.getDefaultInstance());
}

public NullValueSerializer(ProtobufJacksonConfig config) {
super(NullValue.class);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,23 @@
package com.hubspot.jackson.datatype.protobuf.builtin.serializers;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.google.protobuf.Descriptors.FieldDescriptor;
import com.google.protobuf.Struct;
import com.hubspot.jackson.datatype.protobuf.ProtobufJacksonConfig;
import com.hubspot.jackson.datatype.protobuf.ProtobufSerializer;
import java.io.IOException;

public class StructSerializer extends ProtobufSerializer<Struct> {
private static final FieldDescriptor FIELDS_FIELD = Struct.getDescriptor().findFieldByName("fields");

@Deprecated
public StructSerializer() {
super(Struct.class);
this(ProtobufJacksonConfig.getDefaultInstance());
}

public StructSerializer(ProtobufJacksonConfig config) {
super(Struct.class, config);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
package com.hubspot.jackson.datatype.protobuf.builtin.serializers;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.google.protobuf.Timestamp;
import com.google.protobuf.util.Timestamps;
import com.hubspot.jackson.datatype.protobuf.ProtobufJacksonConfig;
import com.hubspot.jackson.datatype.protobuf.ProtobufSerializer;
import java.io.IOException;

public class TimestampSerializer extends ProtobufSerializer<Timestamp> {

@Deprecated
public TimestampSerializer() {
super(Timestamp.class);
this(ProtobufJacksonConfig.getDefaultInstance());
}

public TimestampSerializer(ProtobufJacksonConfig config) {
super(Timestamp.class, config);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,24 @@
package com.hubspot.jackson.datatype.protobuf.builtin.serializers;

import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.google.protobuf.Descriptors.FieldDescriptor;
import com.google.protobuf.Value;
import com.hubspot.jackson.datatype.protobuf.ProtobufJacksonConfig;
import com.hubspot.jackson.datatype.protobuf.ProtobufSerializer;
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;

public class ValueSerializer extends ProtobufSerializer<Value> {

@Deprecated
public ValueSerializer() {
super(Value.class);
this(ProtobufJacksonConfig.getDefaultInstance());
}

public ValueSerializer(ProtobufJacksonConfig config) {
super(Value.class, config);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
package com.hubspot.jackson.datatype.protobuf.builtin.serializers;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.google.protobuf.Descriptors.FieldDescriptor;
import com.google.protobuf.MessageOrBuilder;
import com.hubspot.jackson.datatype.protobuf.ProtobufJacksonConfig;
import com.hubspot.jackson.datatype.protobuf.ProtobufSerializer;
import java.io.IOException;

public class WrappedPrimitiveSerializer<T extends MessageOrBuilder> extends ProtobufSerializer<T> {

@Deprecated
public WrappedPrimitiveSerializer(Class<T> wrapperType) {
super(wrapperType);
this(wrapperType, ProtobufJacksonConfig.getDefaultInstance());
}

public WrappedPrimitiveSerializer(Class<T> wrapperType, ProtobufJacksonConfig config) {
super(wrapperType, config);
}

@Override
Expand Down

0 comments on commit 2fd2a54

Please sign in to comment.