net.adns: Add :lookup_promise() method
authorMatthew Wild <mwild1@gmail.com>
Fri, 24 Jan 2020 13:50:02 +0000
changeset 10618 431511e190bc
parent 10617 74d66b1be989
child 10619 2bc918999615
net.adns: Add :lookup_promise() method
net/adns.lua
--- a/net/adns.lua	Fri Jan 24 13:49:33 2020 +0000
+++ b/net/adns.lua	Fri Jan 24 13:50:02 2020 +0000
@@ -8,6 +8,7 @@
 
 local server = require "net.server";
 local new_resolver = require "net.dns".resolver;
+local promise = require "util.promise";
 
 local log = require "util.logger".init("adns");
 
@@ -91,6 +92,18 @@
 			end)(resolver:peek(qname, qtype, qclass));
 end
 
+function async_resolver_methods:lookup_promise(qname, qtype, qclass)
+	return promise.new(function (resolve, reject)
+		local function handler(answer)
+			if not answer then
+				return reject();
+			end
+			resolve(answer);
+		end
+		self:lookup(handler, qname, qtype, qclass);
+	end);
+end
+
 function query_methods:cancel(call_handler, reason) -- luacheck: ignore 212/reason
 	log("warn", "Cancelling DNS lookup for %s", self[4]);
 	self[1].cancel(self[2], self[3], self[4], self[5], call_handler);