# -*- coding: utf-8 -*-
"""
h2/errors
~~~~~~~~~~~~~~~~~~~
Global error code registry containing the established HTTP/2 error codes.
The current registry is available at:
https://tools.ietf.org/html/rfc7540#section-11.4
"""
import enum
class ErrorCodes(enum.IntEnum):
    """
    All known HTTP/2 error codes.
    .. versionadded:: 2.5.0
    """
    #: Graceful shutdown.
    NO_ERROR = 0x0
    #: Protocol error detected.
    PROTOCOL_ERROR = 0x1
    #: Implementation fault.
    INTERNAL_ERROR = 0x2
    #: Flow-control limits exceeded.
    FLOW_CONTROL_ERROR = 0x3
    #: Settings not acknowledged.
    SETTINGS_TIMEOUT = 0x4
    #: Frame received for closed stream.
    STREAM_CLOSED = 0x5
    #: Frame size incorrect.
    FRAME_SIZE_ERROR = 0x6
    #: Stream not processed.
    REFUSED_STREAM = 0x7
    #: Stream cancelled.
    CANCEL = 0x8
    #: Compression state not updated.
    COMPRESSION_ERROR = 0x9
    #: TCP connection error for CONNECT method.
    CONNECT_ERROR = 0xa
    #: Processing capacity exceeded.
    ENHANCE_YOUR_CALM = 0xb
    #: Negotiated TLS parameters not acceptable.
    INADEQUATE_SECURITY = 0xc
    #: Use HTTP/1.1 for the request.
    HTTP_1_1_REQUIRED = 0xd
def _error_code_from_int(code):
    """
    Given an integer error code, returns either one of :class:`ErrorCodes
    
` or, if not present in the known set of codes,
    returns the integer directly.
    """
    try:
        return ErrorCodes(code)
    except ValueError:
        return code
#: Graceful shutdown.
#:
#: .. deprecated:: 2.5.0
#:    Deprecated in favour of :class:`ErrorCodes.NO_ERROR
#:    `.
NO_ERROR = ErrorCodes.NO_ERROR
#: Protocol error detected.
#:
#: .. deprecated:: 2.5.0
#:    Deprecated in favour of :class:`ErrorCodes.PROTOCOL_ERROR
#:    `.
PROTOCOL_ERROR = ErrorCodes.PROTOCOL_ERROR
#: Implementation fault.
#:
#: .. deprecated:: 2.5.0
#:    Deprecated in favour of :class:`ErrorCodes.INTERNAL_ERROR
#:    `.
INTERNAL_ERROR = ErrorCodes.INTERNAL_ERROR
#: Flow-control limits exceeded.
#:
#: .. deprecated:: 2.5.0
#:    Deprecated in favour of :class:`ErrorCodes.FLOW_CONTROL_ERROR
#:    `.
FLOW_CONTROL_ERROR = ErrorCodes.FLOW_CONTROL_ERROR
#: Settings not acknowledged.
#:
#: .. deprecated:: 2.5.0
#:    Deprecated in favour of :class:`ErrorCodes.SETTINGS_TIMEOUT
#:    `.
SETTINGS_TIMEOUT = ErrorCodes.SETTINGS_TIMEOUT
#: Frame received for closed stream.
#:
#: .. deprecated:: 2.5.0
#:    Deprecated in favour of :class:`ErrorCodes.STREAM_CLOSED
#:    `.
STREAM_CLOSED = ErrorCodes.STREAM_CLOSED
#: Frame size incorrect.
#:
#: .. deprecated:: 2.5.0
#:    Deprecated in favour of :class:`ErrorCodes.FRAME_SIZE_ERROR
#:    `.
FRAME_SIZE_ERROR = ErrorCodes.FRAME_SIZE_ERROR
#: Stream not processed.
#:
#: .. deprecated:: 2.5.0
#:    Deprecated in favour of :class:`ErrorCodes.REFUSED_STREAM
#:    `.
REFUSED_STREAM = ErrorCodes.REFUSED_STREAM
#: Stream cancelled.
#:
#: .. deprecated:: 2.5.0
#:    Deprecated in favour of :class:`ErrorCodes.CANCEL
#:    `.
CANCEL = ErrorCodes.CANCEL
#: Compression state not updated.
#:
#: .. deprecated:: 2.5.0
#:    Deprecated in favour of :class:`ErrorCodes.COMPRESSION_ERROR
#:    `.
COMPRESSION_ERROR = ErrorCodes.COMPRESSION_ERROR
#: TCP connection error for CONNECT method.
#:
#: .. deprecated:: 2.5.0
#:    Deprecated in favour of :class:`ErrorCodes.CONNECT_ERROR
#:    `.
CONNECT_ERROR = ErrorCodes.CONNECT_ERROR
#: Processing capacity exceeded.
#:
#: .. deprecated:: 2.5.0
#:    Deprecated in favour of :class:`ErrorCodes.ENHANCE_YOUR_CALM
#:    `.
ENHANCE_YOUR_CALM = ErrorCodes.ENHANCE_YOUR_CALM
#: Negotiated TLS parameters not acceptable.
#:
#: .. deprecated:: 2.5.0
#:    Deprecated in favour of :class:`ErrorCodes.INADEQUATE_SECURITY
#:    `.
INADEQUATE_SECURITY = ErrorCodes.INADEQUATE_SECURITY
#: Use HTTP/1.1 for the request.
#:
#: .. deprecated:: 2.5.0
#:    Deprecated in favour of :class:`ErrorCodes.HTTP_1_1_REQUIRED
#:    `.
HTTP_1_1_REQUIRED = ErrorCodes.HTTP_1_1_REQUIRED
#: All known HTTP/2 error codes.
#:
#: .. deprecated:: 2.5.0
#:    Deprecated in favour of :class:`ErrorCodes `.
H2_ERRORS = list(ErrorCodes)
__all__ = ['H2_ERRORS', 'NO_ERROR', 'PROTOCOL_ERROR', 'INTERNAL_ERROR',
           'FLOW_CONTROL_ERROR', 'SETTINGS_TIMEOUT', 'STREAM_CLOSED',
           'FRAME_SIZE_ERROR', 'REFUSED_STREAM', 'CANCEL', 'COMPRESSION_ERROR',
           'CONNECT_ERROR', 'ENHANCE_YOUR_CALM', 'INADEQUATE_SECURITY',
           'HTTP_1_1_REQUIRED', 'ErrorCodes']