Skip to content

Instantly share code, notes, and snippets.

@takkkun
Last active December 14, 2015 00:59
Show Gist options
  • Save takkkun/5002968 to your computer and use it in GitHub Desktop.
Save takkkun/5002968 to your computer and use it in GitHub Desktop.
#!/usr/bin/env escript
main([Query|_]) ->
case matcher(Query) of
{ok, Matcher} ->
print(lists:filter(Matcher, http_statuses()));
{error, {Message, Position}} ->
io:format("Error: ~s at ~p character~n", [Message, Position])
end;
main([]) ->
print(http_statuses()).
matcher([C|_] = Query) when $0 =< C andalso C =< $9 ->
case re:compile("^" ++ Query) of
{ok, Regexp} ->
{ok, fun({Code, _}) ->
re:run(Code, Regexp, [{capture, none}]) =:= match
end};
{error, ErrorSpec} ->
{error, ErrorSpec}
end;
matcher(Query) ->
{ok, fun({_, Message}) -> string:str(Message, Query) > 0 end}.
print(HttpStatuses) ->
lists:foreach(fun({Code, Message}) ->
io:format("~s: ~s~n", [Code, Message])
end, HttpStatuses).
http_statuses() ->
[
{"100", "Continue"},
{"101", "Switching Protocols"},
{"102", "Processing"},
{"200", "OK"},
{"201", "Created"},
{"202", "Accepted"},
{"203", "Non-Authoritative Information"},
{"204", "No Content"},
{"205", "Reset Content"},
{"206", "Partial Content"},
{"207", "Multi-Status"},
{"208", "Already Reported"},
{"300", "Multiple Choices"},
{"301", "Moved Permanently"},
{"302", "Found"},
{"303", "See Other"},
{"304", "Not Modified"},
{"305", "Use Proxy"},
{"307", "Temporary 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", "Request Entity Too Large"},
{"414", "Request-URI Too Large"},
{"415", "Unsupported Media Type"},
{"416", "Request Range Not Satisfiable"},
{"417", "Expectation Failed"},
{"418", "I'm a teapot"},
{"422", "Unprocessable Entity"},
{"423", "Locked"},
{"424", "Failed Dependency"},
{"425", "No code"},
{"426", "Upgrade Required"},
{"428", "Precondition Required"},
{"429", "Too Many Requests"},
{"431", "Request Header Fields Too Large"},
{"449", "Retry with"},
{"500", "Internal Server Error"},
{"501", "Not Implemented"},
{"502", "Bad Gateway"},
{"503", "Service Unavailable"},
{"504", "Gateway Timeout"},
{"505", "HTTP Version Not Supported"},
{"506", "Variant Also Negotiates"},
{"507", "Insufficient Storage"},
{"509", "Bandwidth Limit Exceeded"},
{"510", "Not Extended"},
{"511", "Network Authentication Required"}
].
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment