# frozen_string_literal: true
require "dhall/as_dhall"
require "dhall/ast"
require "dhall/binary"
require "dhall/builtins"
require "dhall/coder"
require "dhall/normalize"
require "dhall/parser"
require "dhall/resolve"
require "dhall/typecheck"
module Dhall
using Dhall::AsDhall
def self.load(
source,
resolver: Resolvers::Default.new,
timeout: 10
)
deadline = Util::Deadline.for_timeout(timeout)
Promise.resolve(nil).then {
load_raw(source.to_s, timeout: timeout).resolve(
resolver: resolver.with_deadline(deadline)
)
}.then do |resolved|
deadline.timeout_block do
TypeChecker.for(resolved).annotate(TypeChecker::Context.new).normalize
end
end
end
def self.load_raw(source, timeout: 10)
source = Util.text_or_binary(source)
Util::Deadline.for_timeout(timeout).timeout_block do
if source.encoding == Encoding::BINARY
from_binary(source)
else
Parser.parse(source).value
end
end
end
def self.dump(o)
CBOR.encode(o.as_dhall)
end
class TimeoutException < StandardError; end
end