1# frozen_string_literal: true
 2
 3require "em_promise"
 4
 5module EM
 6	def self.promise_defer(klass: EMPromise, &block)
 7		promise = klass.new
 8		EventMachine.defer(
 9			block,
10			promise.method(:fulfill),
11			promise.method(:reject)
12		)
13		promise
14	end
15
16	def self.promise_fiber
17		promise = EMPromise.new
18		Fiber.new {
19			begin
20				promise.fulfill(yield)
21			rescue StandardError => e
22				promise.reject(e)
23			end
24		}.resume
25		promise
26	end
27
28	def self.promise_timer(timeout)
29		promise = EMPromise.new
30		EM.add_timer(timeout) do
31			promise.fulfill(nil)
32		end
33		promise
34	end
35end