net.lua

Branches > main > a9044f7 > files / nvim / pack / plugins / opt / conjure / lua / conjure / net.lua

-- [nfnl] fnl/conjure/net.fnl
local _local_1_ = require("conjure.nfnl.module")
local autoload = _local_1_.autoload
local define = _local_1_.define
local core = autoload("conjure.nfnl.core")
local M = define("conjure.net", {})
M.resolve = function(host)
  if (host == "::") then
    return host
  else
    local function _2_(_241)
      return ("inet" == core.get(_241, "family"))
    end
    return core.get(core.first(core.filter(_2_, vim.uv.getaddrinfo(host))), "addr")
  end
end
local state = {["sock-drawer"] = {}}
local function destroy_sock(sock)
  if not sock:is_closing() then
    sock:read_stop()
    sock:shutdown()
    sock:close()
  else
  end
  local function _5_(_241)
    return (sock ~= _241)
  end
  state["sock-drawer"] = core.filter(_5_, state["sock-drawer"])
  return nil
end
M.connect = function(_6_)
  local host = _6_.host
  local port = _6_.port
  local cb = _6_.cb
  local sock = vim.uv.new_tcp()
  local resolved_host = M.resolve(host)
  if not resolved_host then
    error("Failed to resolve host for Conjure connection")
  else
  end
  sock:connect(resolved_host, port, cb)
  table.insert(state["sock-drawer"], sock)
  local function _8_()
    return destroy_sock(sock)
  end
  return {sock = sock, ["resolved-host"] = resolved_host, destroy = _8_, host = host, port = port}
end
local function destroy_all_socks()
  return core["run!"](destroy_sock, state["sock-drawer"])
end
local group = vim.api.nvim_create_augroup("conjure-net-sock-cleanup", {})
vim.api.nvim_create_autocmd("VimLeavePre", {group = group, pattern = "*", callback = destroy_all_socks})
return M