package com.zsc.edu.gateway.common.enums;


import com.zsc.edu.gateway.exception.StateException;

import java.util.EnumSet;

/**
 * @author harry_yao
 */
public interface IState<T extends Enum<T>> {

    /**
     * 用于检查对象当前状态是否等于correctStatus
     *
     * @param correctState 正确状态
     */
    default void checkStatus(T correctState) {
        if (this != correctState) {
            throw new StateException(correctState.getClass(), this, correctState);
        }
    }

    /**
     * 用于检查对象当前状态是否在集合correctStates中
     *
     * @param correctStates 正确状态集合
     */
    @SuppressWarnings("SuspiciousMethodCalls")
    default void checkStatus(EnumSet<T> correctStates) {
        if (!correctStates.contains(this)) {
            throw new StateException(this.getClass(), this, correctStates);
        }
    }

}
