~singpolyma/dhall-ruby

ref: b561310f04f8e0b358b39679da096e1d5eb953aa dhall-ruby/lib/dhall d---------
as_dhall for Proc

Cannot actually serialize this, but can be useful for passing functions
in to Dhall functions, etc.
Update to latest dhall-lang
Handle self-describe tag anywhere
Fix for substitute on LetBlock/LetIn
Improve the multiline algorithm

Require that the whitespace being stripped is a common prefix.
Allow tabs and blank lines in multiline strings
Hoist single-label enum into array
Split Union and Enum

Stop putting special case conditionals for Union#value.nil? everywhere
and just split the classes.
Customizable cache

Caches implemented in this commit:

StandardFileCache - cache conforming to dhall-lang
RamCache - stores in a hash, meant for single-load caching
NoCache - when you want to be sure
Default max import depth of 50

So even without a timeout, there is a limit on bonkers cases.

Standard resolver defaults to INIFINTY since the standard does not
define a depth limit.
Timeout mechanism

Sets timeouts in HTTP readers, checks for deadline exceeded before each
resolution step, and uses Timeout::timeout for pure-ruby computations.
Update text-or-binary heuristic

The `cbor` gem is a bit janky and it turns out catching NoMemoryError is
not safe, so use an encoding-based heuristic to detect binary vs utf8
data.
Update to dhall-lang 7.0.0
Dhall::Coder

Full "to basic ruby types" deserializing, set up as a drop-in for
ActiveRecord::Base#serialize
Fix Typo

Dhall::Text is obviously the Text builtin, not the Double one.
Allow as_dhall to be customised by encode_with

Dhall has a goal to replace YAML.  Ruby's ecosystem already has deep
integration with YAML (specifically with the Psych implementation in
stdlib) -- so if an object customises its YAML encoding, but doesn't
know about Dhall, customise the Dhall encoding in a compatible way.
Do not deep-annotate OpenStruct#as_dhall
Encoding binary string as List Natural

Certainly better than an error, and gives the dhall side access to the
individual bytes.
Do not load if already loaded

In case the resolver has some values already
Next