aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/vlib/net/http/status.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/vlib/net/http/status.v')
-rw-r--r--v_windows/v/vlib/net/http/status.v255
1 files changed, 255 insertions, 0 deletions
diff --git a/v_windows/v/vlib/net/http/status.v b/v_windows/v/vlib/net/http/status.v
new file mode 100644
index 0000000..f4bc9ee
--- /dev/null
+++ b/v_windows/v/vlib/net/http/status.v
@@ -0,0 +1,255 @@
+// Copyright (c) 2020 Justin E. Jones. All rights reserved.
+// Use of this source code is governed by an MIT license
+// that can be found in the LICENSE file.
+module http
+
+// The status codes listed here are based on the comprehensive list,
+// available at:
+// https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
+pub enum Status {
+ unknown = -1
+ unassigned = 0
+ cont = 100
+ switching_protocols = 101
+ processing = 102
+ checkpoint_draft = 103
+ ok = 200
+ created = 201
+ accepted = 202
+ non_authoritative_information = 203
+ no_content = 204
+ reset_content = 205
+ partial_content = 206
+ multi_status = 207
+ already_reported = 208
+ im_used = 226
+ multiple_choices = 300
+ moved_permanently = 301
+ found = 302
+ see_other = 303
+ not_modified = 304
+ use_proxy = 305
+ switch_proxy = 306
+ temporary_redirect = 307
+ permanent_redirect = 308
+ bad_request = 400
+ unauthorized = 401
+ payment_required = 402
+ forbidden = 403
+ not_found = 404
+ method_not_allowed = 405
+ not_acceptable = 406
+ proxy_authentication_required = 407
+ request_timeout = 408
+ conflict = 409
+ gone = 410
+ length_required = 411
+ precondition_failed = 412
+ request_entity_too_large = 413
+ request_uri_too_long = 414
+ unsupported_media_type = 415
+ requested_range_not_satisfiable = 416
+ expectation_failed = 417
+ im_a_teapot = 418
+ misdirected_request = 421
+ unprocessable_entity = 422
+ locked = 423
+ failed_dependency = 424
+ unordered_collection = 425
+ upgrade_required = 426
+ precondition_required = 428
+ too_many_requests = 429
+ request_header_fields_too_large = 431
+ unavailable_for_legal_reasons = 451
+ client_closed_request = 499
+ internal_server_error = 500
+ not_implemented = 501
+ bad_gateway = 502
+ service_unavailable = 503
+ gateway_timeout = 504
+ http_version_not_supported = 505
+ variant_also_negotiates = 506
+ insufficient_storage = 507
+ loop_detected = 508
+ bandwidth_limit_exceeded = 509
+ not_extended = 510
+ network_authentication_required = 511
+}
+
+pub fn status_from_int(code int) Status {
+ return match code {
+ 100 { Status.cont }
+ 101 { Status.switching_protocols }
+ 102 { Status.processing }
+ 103 { Status.checkpoint_draft }
+ 104...199 { Status.unassigned }
+ 200 { Status.ok }
+ 201 { Status.created }
+ 202 { Status.accepted }
+ 203 { Status.non_authoritative_information }
+ 204 { Status.no_content }
+ 205 { Status.reset_content }
+ 206 { Status.partial_content }
+ 207 { Status.multi_status }
+ 208 { Status.already_reported }
+ 209...225 { Status.unassigned }
+ 226 { Status.im_used }
+ 227...299 { Status.unassigned }
+ 300 { Status.multiple_choices }
+ 301 { Status.moved_permanently }
+ 302 { Status.found }
+ 303 { Status.see_other }
+ 304 { Status.not_modified }
+ 305 { Status.use_proxy }
+ 306 { Status.switch_proxy }
+ 307 { Status.temporary_redirect }
+ 308 { Status.permanent_redirect }
+ 309...399 { Status.unassigned }
+ 400 { Status.bad_request }
+ 401 { Status.unauthorized }
+ 402 { Status.payment_required }
+ 403 { Status.forbidden }
+ 404 { Status.not_found }
+ 405 { Status.method_not_allowed }
+ 406 { Status.not_acceptable }
+ 407 { Status.proxy_authentication_required }
+ 408 { Status.request_timeout }
+ 409 { Status.conflict }
+ 410 { Status.gone }
+ 411 { Status.length_required }
+ 412 { Status.precondition_failed }
+ 413 { Status.request_entity_too_large }
+ 414 { Status.request_uri_too_long }
+ 415 { Status.unsupported_media_type }
+ 416 { Status.requested_range_not_satisfiable }
+ 417 { Status.expectation_failed }
+ 418 { Status.im_a_teapot }
+ 419...420 { Status.unassigned }
+ 421 { Status.misdirected_request }
+ 422 { Status.unprocessable_entity }
+ 423 { Status.locked }
+ 424 { Status.failed_dependency }
+ 425 { Status.unordered_collection }
+ 426 { Status.upgrade_required }
+ 428 { Status.precondition_required }
+ 429 { Status.too_many_requests }
+ 431 { Status.request_header_fields_too_large }
+ 432...450 { Status.unassigned }
+ 451 { Status.unavailable_for_legal_reasons }
+ 452...499 { Status.unassigned }
+ 500 { Status.internal_server_error }
+ 501 { Status.not_implemented }
+ 502 { Status.bad_gateway }
+ 503 { Status.service_unavailable }
+ 504 { Status.gateway_timeout }
+ 505 { Status.http_version_not_supported }
+ 506 { Status.variant_also_negotiates }
+ 507 { Status.insufficient_storage }
+ 508 { Status.loop_detected }
+ 509 { Status.bandwidth_limit_exceeded }
+ 510 { Status.not_extended }
+ 511 { Status.network_authentication_required }
+ 512...599 { Status.unassigned }
+ else { Status.unknown }
+ }
+}
+
+pub fn (code Status) str() string {
+ return match code {
+ .cont { 'Continue' }
+ .switching_protocols { 'Switching Protocols' }
+ .processing { 'Processing' }
+ .checkpoint_draft { 'Checkpoint Draft' }
+ .ok { 'OK' }
+ .created { 'Created' }
+ .accepted { 'Accepted' }
+ .non_authoritative_information { 'Non Authoritative Information' }
+ .no_content { 'No Content' }
+ .reset_content { 'Reset Content' }
+ .partial_content { 'Partial Content' }
+ .multi_status { 'Multi Status' }
+ .already_reported { 'Already Reported' }
+ .im_used { 'IM Used' }
+ .multiple_choices { 'Multiple Choices' }
+ .moved_permanently { 'Moved Permanently' }
+ .found { 'Found' }
+ .see_other { 'See Other' }
+ .not_modified { 'Not Modified' }
+ .use_proxy { 'Use Proxy' }
+ .switch_proxy { 'Switch Proxy' }
+ .temporary_redirect { 'Temporary Redirect' }
+ .permanent_redirect { 'Permanent Redirect' }
+ .bad_request { 'Bad Request' }
+ .unauthorized { 'Unauthorized' }
+ .payment_required { 'Payment Required' }
+ .forbidden { 'Forbidden' }
+ .not_found { 'Not Found' }
+ .method_not_allowed { 'Method Not Allowed' }
+ .not_acceptable { 'Not Acceptable' }
+ .proxy_authentication_required { 'Proxy Authentication Required' }
+ .request_timeout { 'Request Timeout' }
+ .conflict { 'Conflict' }
+ .gone { 'Gone' }
+ .length_required { 'Length Required' }
+ .precondition_failed { 'Precondition Failed' }
+ .request_entity_too_large { 'Request Entity Too Large' }
+ .request_uri_too_long { 'Request URI Too Long' }
+ .unsupported_media_type { 'Unsupported Media Type' }
+ .requested_range_not_satisfiable { 'Requested Range Not Satisfiable' }
+ .expectation_failed { 'Expectation Failed' }
+ .im_a_teapot { 'Im a teapot' }
+ .misdirected_request { 'Misdirected Request' }
+ .unprocessable_entity { 'Unprocessable Entity' }
+ .locked { 'Locked' }
+ .failed_dependency { 'Failed Dependency' }
+ .unordered_collection { 'Unordered Collection' }
+ .upgrade_required { 'Upgrade Required' }
+ .precondition_required { 'Precondition Required' }
+ .too_many_requests { 'Too Many Requests' }
+ .request_header_fields_too_large { 'Request Header Fields Too Large' }
+ .unavailable_for_legal_reasons { 'Unavailable For Legal Reasons' }
+ .internal_server_error { 'Internal Server Error' }
+ .not_implemented { 'Not Implemented' }
+ .bad_gateway { 'Bad Gateway' }
+ .service_unavailable { 'Service Unavailable' }
+ .gateway_timeout { 'Gateway Timeout' }
+ .http_version_not_supported { 'HTTP Version Not Supported' }
+ .variant_also_negotiates { 'Variant Also Negotiates' }
+ .insufficient_storage { 'Insufficient Storage' }
+ .loop_detected { 'Loop Detected' }
+ .bandwidth_limit_exceeded { 'Bandwidth Limit Exceeded' }
+ .not_extended { 'Not Extended' }
+ .network_authentication_required { 'Network Authentication Required' }
+ .unassigned { 'Unassigned' }
+ else { 'Unknown' }
+ }
+}
+
+// int converts an assigned and known Status to its integral equivalent.
+// if a Status is unknown or unassigned, this method will return zero
+pub fn (code Status) int() int {
+ if code in [.unknown, .unassigned] {
+ return 0
+ }
+ return int(code)
+}
+
+// is_valid returns true if the status code is assigned and known
+pub fn (code Status) is_valid() bool {
+ number := code.int()
+ return number >= 100 && number < 600
+}
+
+// is_error will return true if the status code represents either a client or
+// a server error; otherwise will return false
+pub fn (code Status) is_error() bool {
+ number := code.int()
+ return number >= 400 && number < 600
+}
+
+// is_success will return true if the status code represents either an
+// informational, success, or redirection response; otherwise will return false
+pub fn (code Status) is_success() bool {
+ number := code.int()
+ return number >= 100 && number < 400
+}