package org.onosproject.store.service;

import com.google.common.base.MoreObjects;


/**
 * Database write result.
 */
public class WriteResult {

    private final WriteStatus status;
    private final VersionedValue previousValue;

    public WriteResult(WriteStatus status, VersionedValue previousValue) {
        this.status = status;
        this.previousValue = previousValue;
    }

    public VersionedValue previousValue() {
        return previousValue;
    }

    public WriteStatus status() {
        return status;
    }

    @Override
    public String toString() {
        return MoreObjects.toStringHelper(getClass())
                .add("status", status)
                .add("previousValue", previousValue)
                .toString();
    }
}
