"""The http status module inspired from DRF status - https://github.com/encode/django-rest-framework/blob/master/rest_framework/status.py
"""
module HTTPStatus

include("codes.jl")

export is_information, is_success, is_redirect, is_client_error, is_server_error, HTTP_100_CONTINUE,
HTTP_101_SWITCHING_PROTOCOLS,
HTTP_200_OK,
HTTP_201_CREATED,
HTTP_202_ACCEPTED,
HTTP_203_NON_AUTHORITATIVE_INFORMATION,
HTTP_204_NO_CONTENT,
HTTP_205_RESET_CONTENT,
HTTP_206_PARTIAL_CONTENT,
HTTP_207_MULTI_STATUS,
HTTP_208_ALREADY_REPORTED,
HTTP_226_IM_USED,
HTTP_300_MULTIPLE_CHOICES,
HTTP_301_MOVED_PERMANENTLY,
HTTP_302_FOUND,
HTTP_303_SEE_OTHER,
HTTP_304_NOT_MODIFIED,
HTTP_305_USE_PROXY,
HTTP_306_RESERVED,
HTTP_307_TEMPORARY_REDIRECT,
HTTP_308_PERMANENT_REDIRECT,
HTTP_400_BAD_REQUEST,
HTTP_401_UNAUTHORIZED,
HTTP_402_PAYMENT_REQUIRED,
HTTP_403_FORBIDDEN,
HTTP_404_NOT_FOUND,
HTTP_405_METHOD_NOT_ALLOWED,
HTTP_406_NOT_ACCEPTABLE,
HTTP_407_PROXY_AUTHENTICATION_REQUIRED,
HTTP_408_REQUEST_TIMEOUT,
HTTP_409_CONFLICT,
HTTP_410_GONE,
HTTP_411_LENGTH_REQUIRED,
HTTP_412_PRECONDITION_FAILED,
HTTP_413_REQUEST_ENTITY_TOO_LARGE,
HTTP_414_REQUEST_URI_TOO_LONG,
HTTP_415_UNSUPPORTED_MEDIA_TYPE,
HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE,
HTTP_417_EXPECTATION_FAILED,
HTTP_418_IM_A_TEAPOT,
HTTP_422_UNPROCESSABLE_ENTITY,
HTTP_423_LOCKED,
HTTP_424_FAILED_DEPENDENCY,
HTTP_426_UPGRADE_REQUIRED,
HTTP_428_PRECONDITION_REQUIRED,
HTTP_429_TOO_MANY_REQUESTS,
HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE,
HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS,
HTTP_500_INTERNAL_SERVER_ERROR,
HTTP_501_NOT_IMPLEMENTED,
HTTP_502_BAD_GATEWAY,
HTTP_503_SERVICE_UNAVAILABLE,
HTTP_504_GATEWAY_TIMEOUT,
HTTP_505_HTTP_VERSION_NOT_SUPPORTED,
HTTP_506_VARIANT_ALSO_NEGOTIATES,
HTTP_507_INSUFFICIENT_STORAGE,
HTTP_508_LOOP_DETECTED,
HTTP_509_BANDWIDTH_LIMIT_EXCEEDED,
HTTP_510_NOT_EXTENDED,
HTTP_511_NETWORK_AUTHENTICATION_REQUIRED

function is_information(code::Int)
    return 100 <= code <= 199
end

function is_success(code::Int)
    return 200 <= code <= 299
end

function is_redirect(code::Int)
    return 300 <= code <= 399
end

function is_client_error(code::Int)
    return 400 <= code <= 499
end

function is_server_error(code::Int)
    return 500 <= code <= 599
end

end # module
