123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294(* This file is part of Dream, released under the MIT license. See LICENSE.md
for details, or visit https://github.com/aantron/dream.
Copyright 2021 Anton Bachin *)typeinformational=[|`Continue|`Switching_Protocols]typesuccessful=[|`OK|`Created|`Accepted|`Non_Authoritative_Information|`No_Content|`Reset_Content|`Partial_Content]typeredirection=[|`Multiple_Choices|`Moved_Permanently|`Found|`See_Other|`Not_Modified|`Temporary_Redirect|`Permanent_Redirect]typeclient_error=[|`Bad_Request|`Unauthorized|`Payment_Required|`Forbidden|`Not_Found|`Method_Not_Allowed|`Not_Acceptable|`Proxy_Authentication_Required|`Request_Timeout|`Conflict|`Gone|`Length_Required|`Precondition_Failed|`Payload_Too_Large|`URI_Too_Long|`Unsupported_Media_Type|`Range_Not_Satisfiable|`Expectation_Failed|`Misdirected_Request|`Too_Early|`Upgrade_Required|`Precondition_Required|`Too_Many_Requests|`Request_Header_Fields_Too_Large|`Unavailable_For_Legal_Reasons]typeserver_error=[|`Internal_Server_Error|`Not_Implemented|`Bad_Gateway|`Service_Unavailable|`Gateway_Timeout|`HTTP_Version_Not_Supported]typestandard_status=[|informational|successful|redirection|client_error|server_error]typestatus=[|standard_status|`Statusofint]letis_informational=function|#informational->true|`Statuscodewhencode>=100&&code<=199->true|#status->falseletis_successful=function|#successful->true|`Statuscodewhencode>=200&&code<=299->true|#status->falseletis_redirection=function|#redirection->true|`Statuscodewhencode>=300&&code<=399->true|#status->falseletis_client_error=function|#client_error->true|`Statuscodewhencode>=400&&code<=499->true|#status->falseletis_server_error=function|#server_error->true|`Statuscodewhencode>=500&&code<=599->true|#status->falseletstatus_to_int=function|`Continue->100|`Switching_Protocols->101|`OK->200|`Created->201|`Accepted->202|`Non_Authoritative_Information->203|`No_Content->204|`Reset_Content->205|`Partial_Content->206|`Multiple_Choices->300|`Moved_Permanently->301|`Found->302|`See_Other->303|`Not_Modified->304|`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|`Payload_Too_Large->413|`URI_Too_Long->414|`Unsupported_Media_Type->415|`Range_Not_Satisfiable->416|`Expectation_Failed->417|`Misdirected_Request->421|`Too_Early->425|`Upgrade_Required->426|`Precondition_Required->428|`Too_Many_Requests->429|`Request_Header_Fields_Too_Large->431|`Unavailable_For_Legal_Reasons->451|`Internal_Server_Error->500|`Not_Implemented->501|`Bad_Gateway->502|`Service_Unavailable->503|`Gateway_Timeout->504|`HTTP_Version_Not_Supported->505|`Statuscode->codeletint_to_status:int->status=function|100->`Continue|101->`Switching_Protocols|200->`OK|201->`Created|202->`Accepted|203->`Non_Authoritative_Information|204->`No_Content|205->`Reset_Content|206->`Partial_Content|300->`Multiple_Choices|301->`Moved_Permanently|302->`Found|303->`See_Other|304->`Not_Modified|307->`Temporary_Redirect|308->`Permanent_Redirect|400->`Bad_Request|401->`Unauthorized|402->`Payment_Required|403->`Forbidden|404->`Not_Found|405->`Method_Not_Allowed|406->`Not_Acceptable|407->`Proxy_Authentication_Required|408->`Request_Timeout|409->`Conflict|410->`Gone|411->`Length_Required|412->`Precondition_Failed|413->`Payload_Too_Large|414->`URI_Too_Long|415->`Unsupported_Media_Type|416->`Range_Not_Satisfiable|417->`Expectation_Failed|421->`Misdirected_Request|425->`Too_Early|426->`Upgrade_Required|428->`Precondition_Required|429->`Too_Many_Requests|431->`Request_Header_Fields_Too_Large|451->`Unavailable_For_Legal_Reasons|500->`Internal_Server_Error|501->`Not_Implemented|502->`Bad_Gateway|503->`Service_Unavailable|504->`Gateway_Timeout|505->`HTTP_Version_Not_Supported|code->`Statuscodeletstatus_to_reasonstatus=letstatus=(status:>status)inletstatus=matchstatuswith|`Statuscode->int_to_statuscode|_->statusinmatchstatuswith|`Continue->Some"Continue"|`Switching_Protocols->Some"Switching Protocols"|`OK->Some"OK"|`Created->Some"Created"|`Accepted->Some"Accepted"|`Non_Authoritative_Information->Some"Non-Authoritative Information"|`No_Content->Some"No Content"|`Reset_Content->Some"Reset Content"|`Partial_Content->Some"Partial Content"|`Multiple_Choices->Some"Multiple Choices"|`Moved_Permanently->Some"Moved Permanently"|`Found->Some"Found"|`See_Other->Some"See Other"|`Not_Modified->Some"Not Modified"|`Temporary_Redirect->Some"Temporary Redirect"|`Permanent_Redirect->Some"Permanent Redirect"|`Bad_Request->Some"Bad Request"|`Unauthorized->Some"Unauthorized"|`Payment_Required->Some"Payment Required"|`Forbidden->Some"Forbidden"|`Not_Found->Some"Not Found"|`Method_Not_Allowed->Some"Method Not Allowed"|`Not_Acceptable->Some"Not Acceptable"|`Proxy_Authentication_Required->Some"Proxy Authentication Required"|`Request_Timeout->Some"Request Timeout"|`Conflict->Some"Conflict"|`Gone->Some"Gone"|`Length_Required->Some"Length Required"|`Precondition_Failed->Some"Precondition Failed"|`Payload_Too_Large->Some"Payload Too Large"|`URI_Too_Long->Some"URI Too Long"|`Unsupported_Media_Type->Some"Unsupported Media Type"|`Range_Not_Satisfiable->Some"Range Not Satisfiable"|`Expectation_Failed->Some"Expectation Failed"|`Misdirected_Request->Some"Misdirected Request"|`Too_Early->Some"Too Early"|`Upgrade_Required->Some"Upgrade Required"|`Precondition_Required->Some"Precondition Required"|`Too_Many_Requests->Some"Too Many Requests"|`Request_Header_Fields_Too_Large->Some"Request Header Fields Too Large"|`Unavailable_For_Legal_Reasons->Some"Unavailable For Legal Reasons"|`Internal_Server_Error->Some"Internal Server Error"|`Not_Implemented->Some"Not Implemented"|`Bad_Gateway->Some"Bad Gateway"|`Service_Unavailable->Some"Service Unavailable"|`Gateway_Timeout->Some"Gateway Timeout"|`HTTP_Version_Not_Supported->Some"HTTP Version Not Supported"|`Status102->Some"Processing"|`Status103->Some"Early Hints"|`Status207->Some"Multi-Status"|`Status208->Some"Already Reported"|`Status228->Some"IM Used"|`Status305->Some"Use Proxy"|`Status306->Some"Switch Proxy"|`Status418->Some"I'm a teapot"|`Status422->Some"Unprocessable Entity"|`Status423->Some"Locked"|`Status424->Some"Failed Dependency"|`Status506->Some"Variant Also Negotiates"|`Status507->Some"Insufficient Storage"|`Status508->Some"Loop Detected"|`Status510->Some"Not Extended"|`Status511->Some"Network Authentication Required"|`Status_->Noneletstatus_to_stringstatus=letstatus=(status:>status)inmatchstatus_to_reasonstatus,statuswith|Somereason,_->reason|None,`Statuscode->string_of_intcode|_->"Unknown"[@coverageoff](* Should be impossible. *)letnormalize_statusstatus=match(status:>status)with|`Statuscode->int_to_statuscode|status->statusletstatus_codes_equalstatus_1status_2=normalize_statusstatus_1=normalize_statusstatus_2