alef 0.114.0

Opinionated polyglot binding generator for Rust libraries
Documentation
require 'json'

module Sample
  Request = Struct.new(:payload, :rows, :index, :nested, keyword_init: true)
  Nested = Struct.new(:payload, keyword_init: true)
end

rejected = false
begin
  JSON.parse({ 'limit' => 7 })
rescue TypeError
  rejected = true
end
raise 'raw Hash must fail the String JSON contract' unless rejected

{% for case in cases %}
actual = {{ case.actual }}
expected = {{ case.expected }}
raise {{ case.name }} unless actual == expected
{% endfor %}
request = {{ constructor }}
raise 'constructor JSON field must be a String' unless request.payload.is_a?(String)
raise 'constructor JSON value changed' unless JSON.parse(request.payload) == { 'limit' => 7 }
raise 'nested DTO JSON field must be a String' unless request.nested.payload.is_a?(String)
raise 'nested DTO JSON value changed' unless JSON.parse(request.nested.payload) == [1, false]
puts 'PASS: {{ count }} JSON field cases, raw Hash negative control, and typed constructors'