package org.codehaus.jackson;

/**
 * Enumeration that defines legal encodings that can be used
 * for JSON content, based on list of allowed encodings from
 * <a href="http://www.ietf.org/rfc/rfc4627.txt">JSON specification</a>.
 *<p>
 * Note: if application want to explicitly disregard Encoding
 * limitations (to read in JSON encoded using an encoding not
 * listed as allowed), they can use {@link java.io.Reader} /
 * {@link java.io.Writer} instances as input
 */
public enum JsonEncoding {
    UTF8("UTF-8", false), // N/A for big-endian, really
        UTF16_BE("UTF-16BE", true),
        UTF16_LE("UTF-16LE", false),
        UTF32_BE("UTF-32BE", true),
        UTF32_LE("UTF-32LE", false)
        ;
    
    protected final String _javaName;

    protected final boolean _bigEndian;
    
    JsonEncoding(String javaName, boolean bigEndian)
    {
        _javaName = javaName;
        _bigEndian = bigEndian;
    }

    /**
     * Method for accessing encoding name that JDK will support.
     *
     * @return Matching encoding name that JDK will support.
     */
    public String getJavaName() { return _javaName; }

    /**
     * Whether encoding is big-endian (if encoding supports such
     * notion). If no such distinction is made (as is the case for
     * {@link #UTF8}), return value is undefined.
     *
     * @return True for big-endian encodings; false for little-endian
     *   (or if not applicable)
     */
    public boolean isBigEndian() { return _bigEndian; }
}
