util.hashring: Support associating arbitrary data with nodes
In this API, a 'node' is always a simple text string. Sometimes the caller may
have a more complex structure representing a node, but the hash ring is really
only concerned with the node's name.
This API change allows :add_nodes() to take a table of `node_name = value`
pairs, as well as the simple array of node names previously accepted.
The 'value' of the selected node is returned as a new second result from
:get_node().
If no value is passed when a node is added, it defaults to `true` (as before,
but this was never previously exposed).
local Promise = require "util.promise".Promise;
local record sslctx -- from LuaSec
end
local record lib
enum http_method
"GET"
"HEAD"
"POST"
"PUT"
"OPTIONS"
"DELETE"
-- etc?
end
record http_client_options
sslctx : sslctx
end
record http_options
id : string
onlystatus : boolean
body : string
method : http_method
headers : { string : string }
insecure : boolean
suppress_errors : boolean
streaming_handler : function
suppress_url : boolean
sslctx : sslctx
end
record http_request
host : string
port : string
enum scheme
"http"
"https"
end
scheme : scheme
url : string
userinfo : string
path : string
method : http_method
headers : { string : string }
insecure : boolean
suppress_errors : boolean
streaming_handler : function
http : http_client
time : integer
id : string
callback : http_callback
end
record http_response
end
type http_callback = function (string, number, http_response, http_request)
record http_client
options : http_client_options
request : function (http_client, string, http_options, http_callback)
end
request : function (string, http_options, http_callback) : Promise, string
default : http_client
new : function (http_client_options) : http_client
events : table
-- COMPAT
urlencode : function (string) : string
urldecode : function (string) : string
formencode : function ({ string : string }) : string
formdecode : function (string) : { string : string }
destroy_request : function (http_request)
enum available_features
"sni"
end
features : { available_features : boolean }
end
return lib