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

io.scalecube.cluster.codec.jackson.JacksonMetadataCodec Maven / Gradle / Ivy

package io.scalecube.cluster.codec.jackson;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.scalecube.cluster.metadata.MetadataCodec;
import java.io.IOException;
import java.nio.ByteBuffer;
import reactor.core.Exceptions;

public class JacksonMetadataCodec implements MetadataCodec {

  private final ObjectMapper delegate;

  public JacksonMetadataCodec() {
    this(DefaultObjectMapper.OBJECT_MAPPER);
  }

  public JacksonMetadataCodec(ObjectMapper delegate) {
    this.delegate = delegate;
  }

  @Override
  public Object deserialize(ByteBuffer buffer) {
    if (buffer.remaining() == 0) {
      return null;
    }
    try {
      final MetadataWrapper metadataWrapper =
          this.delegate.readValue(buffer.array(), MetadataWrapper.class);
      return metadataWrapper.getMetadata();
    } catch (IOException e) {
      throw Exceptions.propagate(e);
    }
  }

  @Override
  public ByteBuffer serialize(Object metadata) {
    if (metadata == null) {
      return null;
    }
    try {
      final MetadataWrapper metadataWrapper = new MetadataWrapper(metadata);
      return ByteBuffer.wrap(this.delegate.writeValueAsBytes(metadataWrapper));
    } catch (IOException e) {
      throw Exceptions.propagate(e);
    }
  }

  public static class MetadataWrapper {

    private Object metadata;

    public MetadataWrapper() {}

    public MetadataWrapper(Object metadata) {
      this.metadata = metadata;
    }

    public Object getMetadata() {
      return metadata;
    }

    public void setMetadata(Object metadata) {
      this.metadata = metadata;
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy