Files
gitlab.nvim/lua/gitlab/job.lua
Harrison (Harry) Cramer 22bfd0c83e fix: date fixes; go middleware refactors; regex fixes; etc (#368)
fix: format of date when MR was closed or merged (#367)
refactor: Add Payload Validators + Middleware In Go Code (#366)
fix: Add better checks for leaving comments (#369)
fix: regex support for http credentials embedded in remote url (#372)
fix: Comment on single line selects two lines (#371)

This is a #PATCH release.
2024-09-14 16:53:00 -04:00

74 lines
2.4 KiB
Lua

-- This module is responsible for making API calls to the Go server and
-- running the callbacks associated with those jobs when the JSON is returned
local Job = require("plenary.job")
local u = require("gitlab.utils")
local M = {}
M.run_job = function(endpoint, method, body, callback)
local state = require("gitlab.state")
local args = { "-s", "-X", (method or "POST"), string.format("localhost:%s", state.settings.port) .. endpoint }
if body ~= nil then
local encoded_body = vim.json.encode(body)
table.insert(args, 1, "-d")
table.insert(args, 2, encoded_body)
end
-- This handler will handle all responses from the Go server. Anything with a successful
-- status will call the callback (if it is supplied for the job). Otherwise, it will print out the
-- success message or error message and details from the Go server.
Job:new({
command = "curl",
args = args,
on_stdout = function(_, output)
vim.defer_fn(function()
if output == nil then
return
end
local data_ok, data = pcall(vim.json.decode, output)
-- Failing to unmarshal JSON
if not data_ok then
local msg = string.format("Failed to parse JSON from %s endpoint", endpoint)
if type(output) == "string" then
msg = string.format(msg .. ", got: '%s'", output)
end
u.notify(string.format(msg, endpoint, output), vim.log.levels.WARN)
return
end
-- If JSON provided, handle success or error cases
if data ~= nil then
if data.details == nil then
if callback then
callback(data)
return
end
local message = string.format("%s", data.message)
u.notify(message, vim.log.levels.INFO)
return
end
-- Handle error case
local message = string.format("%s: %s", data.message, data.details)
u.notify(message, vim.log.levels.ERROR)
end
end, 0)
end,
on_stderr = function()
vim.defer_fn(function()
u.notify("Could not run command!", vim.log.levels.ERROR)
end, 0)
end,
on_exit = function(_, status)
vim.defer_fn(function()
if status ~= 0 then
u.notify(string.format("Go server exited with non-zero code: %d", status), vim.log.levels.ERROR)
end
end, 0)
end,
}):start()
end
return M