Changeset

9166:cce55767004a

tools: Add a tool to generate net.http.codes from IANA registry
author Kim Alvefur <zash@zash.se>
date Thu, 08 Feb 2018 17:35:42 +0100
parents 9165:2aaa9f3bb950
children 9167:7ed130d3676c
files tools/http-status-codes.lua
diffstat 1 files changed, 43 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/http-status-codes.lua	Thu Feb 08 17:35:42 2018 +0100
@@ -0,0 +1,43 @@
+-- Generate net/http/codes.lua from IANA HTTP status code registry
+
+local xml = require "util.xml";
+local registry = xml.parse(io.read("*a"));
+
+io.write([[
+
+local response_codes = {
+	-- Source: http://www.iana.org/assignments/http-status-codes
+]]);
+
+for record in registry:get_child("registry"):childtags("record") do
+	-- Extract values
+	local value = record:get_child_text("value");
+	local description = record:get_child_text("description");
+	local ref = record:get_child_text("xref");
+	local code = tonumber(value);
+
+	-- Space between major groups
+	if code and code % 100 == 0 then
+		io.write("\n");
+	end
+
+	-- Reserved and Unassigned entries should be not be included
+	if description == "Reserved" or description == "Unassigned" or description == "(Unused)" then
+		code = nil;
+	end
+
+	-- Non-empty references become comments
+	if ref and ref:find("%S") then
+		ref = " -- " .. ref;
+	else
+		ref = "";
+	end
+
+	io.write((code and "\t[%d] = %q;%s\n" or "\t-- [%s] = %q;%s\n"):format(code or value, description, ref));
+end
+
+io.write([[};
+
+for k,v in pairs(response_codes) do response_codes[k] = k.." "..v; end
+return setmetatable(response_codes, { __index = function(_, k) return k.." Unassigned"; end })
+]]);