package cn.axzo.msg.center.service.enums;

import java.util.Optional;

/**
 * @author yanglin
 */
public interface CodeDefinition<T> {

    T getCode();

    default boolean isNot(T code) {
        return !is(code);
    }

    default boolean is(T code) {
        if (code == null)
            return false;
        return code.equals(this.getCode());
    }

    static <T, E extends Enum<E> & CodeDefinition<T>>
    Optional<E> findByCode(Class<E> enumType, T code) {
        if (code == null)
            return Optional.empty();
        for (E e : enumType.getEnumConstants()) {
            if (e.getCode().equals(code))
                return Optional.of(e);
        }
        return Optional.empty();
    }

}