local curl = {} curl.get = function(uri, opts) local query = opts.query local output = opts.output local headers = opts.headers local callback = opts.callback -- INFO :Init Curl command with {s}ilent and {G}et local cmd = { 'curl', '-GLs', uri } local size = #cmd local function insert(value) size = size + 1 cmd[size] = value end -- INFO :Add headers if headers then for k, v in pairs(headers) do insert(('-H %q: %q'):format(k, v)) end end -- INFO :Add arguments if query then for k, v in pairs(query) do insert(('--data-urlencode %q=%q'):format(k, v)) end end -- INFO :Store output to file if output then insert(('-o %q'):format(output)) end -- INFO : Start a job local outputs = {} local on_stdout = function(_, stdout) local str = table.concat(stdout) if str ~= '' then outputs[#outputs + 1] = str end end local error = {} local on_stderr = function(_, stderr) error[#error + 1] = table.concat(stderr) end local on_exit = function(_, exit) if callback then callback { exit = exit, body = table.concat(outputs), error = error } end end -- vim.pretty_print(table.concat(cmd, ' ')) vim.fn.jobstart(table.concat(cmd, ' '), { stdin = 'null', on_stdout = on_stdout, on_stderr = on_stderr, on_exit = on_exit, }) end ---- TODO : -- curl.post = function () -- -- end return curl