package net.onrc.onos.core.intent;

/**
 * This class is instantiated by Run-times to express intent calculation error
 *
 * @author Toshio Koide (t-koide@onlab.us)
 */
public class ErrorIntent extends Intent {
    public enum ErrorType {
        UNSUPPORTED_INTENT,
        SWITCH_NOT_FOUND,
        PATH_NOT_FOUND,
    }

    public ErrorType errorType;
    public String message;
    public Intent parentIntent;

    /**
     * Default constructor for Kryo deserialization
     */
    protected ErrorIntent() {
    }

    public ErrorIntent(ErrorType errorType, String message, Intent parentIntent) {
        super(parentIntent.getId());
        this.errorType = errorType;
        this.message = message;
        this.parentIntent = parentIntent;
    }
}
