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

io.fluxcapacitor.javaclient.common.serialization.DeserializingObject Maven / Gradle / Ivy

There is a newer version: 0.1015.0
Show newest version
package io.fluxcapacitor.javaclient.common.serialization;

import io.fluxcapacitor.common.api.SerializedObject;
import lombok.ToString;

import java.util.function.Supplier;

import static io.fluxcapacitor.common.ObjectUtils.memoize;

@ToString(exclude = "object")
public class DeserializingObject> {
    private final S serializedObject;
    private final Supplier object;

    public DeserializingObject(S serializedObject, Supplier payload) {
        this.serializedObject = serializedObject;
        this.object = memoize(payload);
    }

    public Object getPayload() {
        return object.get();
    }

    public String getType() {
        return serializedObject.data().getType();
    }

    public int getRevision() {
        return serializedObject.data().getRevision();
    }

    public S getSerializedObject() {
        return serializedObject;
    }

    @SuppressWarnings("unused")
    public Class getPayloadClass() {
        try {
            return Class.forName(getType());
        } catch (ClassNotFoundException e) {
            throw new SerializationException(String.format("Failed to get the class name for a %s", getType()), e);
        }
    }
}