SmileReadFeature.java

package tools.jackson.dataformat.smile;

import tools.jackson.core.FormatFeature;

/**
 * Enumeration that defines all togglable features for Smile parsers.
 *<p>
 * NOTE: in Jackson 2.x this was named {@code SmileParser.Feature}.
 */
public enum SmileReadFeature implements FormatFeature
{
    /**
     * Feature that determines whether 4-byte Smile header is mandatory in input,
     * or optional. If enabled, it means that only input that starts with the header
     * is accepted as valid; if disabled, header is optional. In latter case,
     * settings for content are assumed to be defaults.
     *<p>
     * Feature is enabled by default.
     */
    REQUIRE_HEADER(true)
    ;

    private final boolean _defaultState;
    private final int _mask;

    /**
     * Method that calculates bit set (flags) of all features that
     * are enabled by default.
     */
    public static int collectDefaults()
    {
        int flags = 0;
        for (SmileReadFeature f : values()) {
            if (f.enabledByDefault()) {
                flags |= f.getMask();
            }
        }
        return flags;
    }

    private SmileReadFeature(boolean defaultState) {
        _defaultState = defaultState;
        _mask = (1 << ordinal());
    }

    @Override public boolean enabledByDefault() { return _defaultState; }
    @Override public int getMask() { return _mask; }
    @Override public boolean enabledIn(int flags) { return (flags & getMask()) != 0; }
}