JsonPatchDocumentSerializer.java

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

package com.azure.core.experimental.jsonpatch;

import com.azure.core.util.CoreUtils;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.module.SimpleModule;

import java.io.IOException;

/**
 * Handles serialization of a {@link JsonPatchDocument}.
 */
public class JsonPatchDocumentSerializer extends JsonSerializer<JsonPatchDocument> {
    private static final Module MODULE;

    static {
        MODULE = new SimpleModule().addSerializer(JsonPatchDocument.class, new JsonPatchDocumentSerializer());
    }

    /**
     * Gets the module for this serializer that can be added into an {@link ObjectMapper}.
     *
     * @return The module for this serializer.
     */
    public static Module getModule() {
        return MODULE;
    }

    @Override
    public void serialize(JsonPatchDocument value, JsonGenerator gen, SerializerProvider serializers)
        throws IOException {
        if (CoreUtils.isNullOrEmpty(value.getJsonPatchOperations())) {
            return;
        }

        gen.writeStartArray(value.getJsonPatchOperations().size());

        for (JsonPatchOperation operation : value.getJsonPatchOperations()) {
            gen.writeObject(operation);
        }

        gen.writeEndArray();
    }
}