|
|
|
@ -10,7 +10,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="icon" href="../favicon.png">
|
|
|
|
|
<meta name="generator" content="mkdocs-1.2.3, mkdocs-material-7.1.9">
|
|
|
|
|
<meta name="generator" content="mkdocs-1.2.4, mkdocs-material-7.1.9">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -465,9 +465,9 @@ interface. As yet the interface is very basic.</p>
|
|
|
|
|
function new_answer : (string, int) => map(string, int)
|
|
|
|
|
</code></pre></div>
|
|
|
|
|
<h3 id="types">Types</h3>
|
|
|
|
|
<div class="highlight"><pre><span></span><code><span class="p">-</span><span class="ni">type</span> <span class="n">aci_type</span><span class="p">()</span> <span class="p">::</span> <span class="n">json</span> <span class="p">|</span> <span class="n">string</span><span class="p">.</span>
|
|
|
|
|
<span class="p">-</span><span class="ni">type</span> <span class="n">json</span><span class="p">()</span> <span class="p">::</span> <span class="nn">jsx</span><span class="p">:</span><span class="nf">json_term</span><span class="p">().</span>
|
|
|
|
|
<span class="p">-</span><span class="ni">type</span> <span class="n">json_text</span><span class="p">()</span> <span class="p">::</span> <span class="n">binary</span><span class="p">().</span>
|
|
|
|
|
<div class="highlight"><pre><span></span><code><span class="p">-</span><span class="ni">type</span><span class="w"> </span><span class="n">aci_type</span><span class="p">()</span><span class="w"> </span><span class="p">::</span><span class="w"> </span><span class="n">json</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="n">string</span><span class="p">.</span><span class="w"></span>
|
|
|
|
|
<span class="p">-</span><span class="ni">type</span><span class="w"> </span><span class="n">json</span><span class="p">()</span><span class="w"> </span><span class="p">::</span><span class="w"> </span><span class="nn">jsx</span><span class="p">:</span><span class="nf">json_term</span><span class="p">().</span><span class="w"></span>
|
|
|
|
|
<span class="p">-</span><span class="ni">type</span><span class="w"> </span><span class="n">json_text</span><span class="p">()</span><span class="w"> </span><span class="p">::</span><span class="w"> </span><span class="n">binary</span><span class="p">().</span><span class="w"></span>
|
|
|
|
|
</code></pre></div>
|
|
|
|
|
<h3 id="exports">Exports</h3>
|
|
|
|
|
<h4 id="contract_interfaceaci_type-string-ok-json-string-error-term">contract_interface(aci_type(), string()) -> {ok, json() | string()} | {error, term()}</h4>
|
|
|
|
@ -482,35 +482,35 @@ called <code>aci_test.aes</code> contains the contract in the description from w
|
|
|
|
|
want to generate files <code>aci_test.json</code> which is the JSON encoding of the
|
|
|
|
|
contract interface and <code>aci_test.include</code> which is the contract definition to
|
|
|
|
|
be included inside another contract.</p>
|
|
|
|
|
<div class="highlight"><pre><span></span><code><span class="mi">1</span><span class="o">></span> <span class="p">{</span><span class="n">ok</span><span class="p">,</span><span class="nv">Contract</span><span class="p">}</span> <span class="o">=</span> <span class="nn">file</span><span class="p">:</span><span class="nf">read_file</span><span class="p">(</span><span class="s">"aci_test.aes"</span><span class="p">).</span>
|
|
|
|
|
<span class="p">{</span><span class="n">ok</span><span class="p">,</span><span class="o"><<</span><span class="s">"contract Answers =</span><span class="se">\n</span><span class="s"> record state = { a : answers }</span><span class="se">\n</span><span class="s"> type answers() = map(string, int)</span><span class="se">\n\n</span><span class="s"> stateful function"</span><span class="p">...</span><span class="o">>></span><span class="p">}</span>
|
|
|
|
|
<span class="mi">2</span><span class="o">></span> <span class="p">{</span><span class="n">ok</span><span class="p">,</span><span class="nv">JsonACI</span><span class="p">}</span> <span class="o">=</span> <span class="nn">aeso_aci</span><span class="p">:</span><span class="nf">contract_interface</span><span class="p">(</span><span class="n">json</span><span class="p">,</span> <span class="nv">Contract</span><span class="p">).</span>
|
|
|
|
|
<span class="p">{</span><span class="n">ok</span><span class="p">,[#{</span><span class="n">contract</span> <span class="o">=></span>
|
|
|
|
|
<span class="p">#{</span><span class="n">functions</span> <span class="o">=></span>
|
|
|
|
|
<span class="p">[#{</span><span class="n">arguments</span> <span class="o">=></span> <span class="p">[],</span><span class="n">name</span> <span class="o">=></span> <span class="o"><<</span><span class="s">"init"</span><span class="o">>></span><span class="p">,</span>
|
|
|
|
|
<span class="n">returns</span> <span class="o">=></span> <span class="o"><<</span><span class="s">"Answers.state"</span><span class="o">>></span><span class="p">,</span><span class="n">stateful</span> <span class="o">=></span> <span class="n">true</span><span class="p">},</span>
|
|
|
|
|
<span class="p">#{</span><span class="n">arguments</span> <span class="o">=></span>
|
|
|
|
|
<span class="p">[#{</span><span class="n">name</span> <span class="o">=></span> <span class="o"><<</span><span class="s">"q"</span><span class="o">>></span><span class="p">,</span><span class="n">type</span> <span class="o">=></span> <span class="o"><<</span><span class="s">"string"</span><span class="o">>></span><span class="p">},</span>
|
|
|
|
|
<span class="p">#{</span><span class="n">name</span> <span class="o">=></span> <span class="o"><<</span><span class="s">"a"</span><span class="o">>></span><span class="p">,</span><span class="n">type</span> <span class="o">=></span> <span class="o"><<</span><span class="s">"int"</span><span class="o">>></span><span class="p">}],</span>
|
|
|
|
|
<span class="n">name</span> <span class="o">=></span> <span class="o"><<</span><span class="s">"new_answer"</span><span class="o">>></span><span class="p">,</span>
|
|
|
|
|
<span class="n">returns</span> <span class="o">=></span> <span class="p">#{</span><span class="o"><<</span><span class="s">"map"</span><span class="o">>></span> <span class="o">=></span> <span class="p">[</span><span class="o"><<</span><span class="s">"string"</span><span class="o">>></span><span class="p">,</span><span class="o"><<</span><span class="s">"int"</span><span class="o">>></span><span class="p">]},</span>
|
|
|
|
|
<span class="n">stateful</span> <span class="o">=></span> <span class="n">false</span><span class="p">}],</span>
|
|
|
|
|
<span class="n">name</span> <span class="o">=></span> <span class="o"><<</span><span class="s">"Answers"</span><span class="o">>></span><span class="p">,</span>
|
|
|
|
|
<span class="n">state</span> <span class="o">=></span>
|
|
|
|
|
<span class="p">#{</span><span class="n">record</span> <span class="o">=></span>
|
|
|
|
|
<span class="p">[#{</span><span class="n">name</span> <span class="o">=></span> <span class="o"><<</span><span class="s">"a"</span><span class="o">>></span><span class="p">,</span><span class="n">type</span> <span class="o">=></span> <span class="o"><<</span><span class="s">"Answers.answers"</span><span class="o">>></span><span class="p">}]},</span>
|
|
|
|
|
<span class="n">type_defs</span> <span class="o">=></span>
|
|
|
|
|
<span class="p">[#{</span><span class="n">name</span> <span class="o">=></span> <span class="o"><<</span><span class="s">"answers"</span><span class="o">>></span><span class="p">,</span>
|
|
|
|
|
<span class="n">typedef</span> <span class="o">=></span> <span class="p">#{</span><span class="o"><<</span><span class="s">"map"</span><span class="o">>></span> <span class="o">=></span> <span class="p">[</span><span class="o"><<</span><span class="s">"string"</span><span class="o">>></span><span class="p">,</span><span class="o"><<</span><span class="s">"int"</span><span class="o">>></span><span class="p">]},</span>
|
|
|
|
|
<span class="n">vars</span> <span class="o">=></span> <span class="p">[]}]}}]}</span>
|
|
|
|
|
<span class="mi">3</span><span class="o">></span> <span class="nn">file</span><span class="p">:</span><span class="nf">write_file</span><span class="p">(</span><span class="s">"aci_test.aci"</span><span class="p">,</span> <span class="nn">jsx</span><span class="p">:</span><span class="nf">encode</span><span class="p">(</span><span class="nv">JsonACI</span><span class="p">)).</span>
|
|
|
|
|
<span class="n">ok</span>
|
|
|
|
|
<span class="mi">4</span><span class="o">></span> <span class="p">{</span><span class="n">ok</span><span class="p">,</span><span class="nv">InterfaceStub</span><span class="p">}</span> <span class="o">=</span> <span class="nn">aeso_aci</span><span class="p">:</span><span class="nf">render_aci_json</span><span class="p">(</span><span class="nv">JsonACI</span><span class="p">).</span>
|
|
|
|
|
<span class="p">{</span><span class="n">ok</span><span class="p">,</span><span class="o"><<</span><span class="s">"contract Answers =</span><span class="se">\n</span><span class="s"> record state = {a : Answers.answers}</span><span class="se">\n</span><span class="s"> type answers = map(string, int)</span><span class="se">\n</span><span class="s"> function init "</span><span class="p">...</span><span class="o">>></span><span class="p">}</span>
|
|
|
|
|
<span class="mi">5</span><span class="o">></span> <span class="nn">file</span><span class="p">:</span><span class="nf">write_file</span><span class="p">(</span><span class="s">"aci_test.include"</span><span class="p">,</span> <span class="nv">InterfaceStub</span><span class="p">).</span>
|
|
|
|
|
<span class="n">ok</span>
|
|
|
|
|
<span class="mi">6</span><span class="o">></span> <span class="nn">jsx</span><span class="p">:</span><span class="nf">prettify</span><span class="p">(</span><span class="nn">jsx</span><span class="p">:</span><span class="nf">encode</span><span class="p">(</span><span class="nv">JsonACI</span><span class="p">)).</span>
|
|
|
|
|
<span class="o"><<</span><span class="s">"[</span><span class="se">\n</span><span class="s"> {</span><span class="se">\n</span><span class="s"> </span><span class="se">\"</span><span class="s">contract</span><span class="se">\"</span><span class="s">: {</span><span class="se">\n</span><span class="s"> </span><span class="se">\"</span><span class="s">functions</span><span class="se">\"</span><span class="s">: [</span><span class="se">\n</span><span class="s"> {</span><span class="se">\n</span><span class="s"> </span><span class="se">\"</span><span class="s">arguments</span><span class="se">\"</span><span class="s">: [],</span><span class="se">\n</span><span class="s"> </span><span class="se">\"</span><span class="s">name</span><span class="se">\"</span><span class="s">: </span><span class="se">\"</span><span class="s">init</span><span class="se">\"</span><span class="s">,</span><span class="se">\n</span><span class="s"> "</span><span class="p">...</span><span class="o">>></span>
|
|
|
|
|
<div class="highlight"><pre><span></span><code><span class="mi">1</span><span class="o">></span><span class="w"> </span><span class="p">{</span><span class="n">ok</span><span class="p">,</span><span class="nv">Contract</span><span class="p">}</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nn">file</span><span class="p">:</span><span class="nf">read_file</span><span class="p">(</span><span class="s">"aci_test.aes"</span><span class="p">).</span><span class="w"></span>
|
|
|
|
|
<span class="p">{</span><span class="n">ok</span><span class="p">,</span><span class="o"><<</span><span class="s">"contract Answers =</span><span class="se">\n</span><span class="s"> record state = { a : answers }</span><span class="se">\n</span><span class="s"> type answers() = map(string, int)</span><span class="se">\n\n</span><span class="s"> stateful function"</span><span class="p">...</span><span class="o">>></span><span class="p">}</span><span class="w"></span>
|
|
|
|
|
<span class="mi">2</span><span class="o">></span><span class="w"> </span><span class="p">{</span><span class="n">ok</span><span class="p">,</span><span class="nv">JsonACI</span><span class="p">}</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nn">aeso_aci</span><span class="p">:</span><span class="nf">contract_interface</span><span class="p">(</span><span class="n">json</span><span class="p">,</span><span class="w"> </span><span class="nv">Contract</span><span class="p">).</span><span class="w"></span>
|
|
|
|
|
<span class="p">{</span><span class="n">ok</span><span class="p">,[#{</span><span class="n">contract</span><span class="w"> </span><span class="o">=></span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="p">#{</span><span class="n">functions</span><span class="w"> </span><span class="o">=></span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="p">[#{</span><span class="n">arguments</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="p">[],</span><span class="n">name</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="o"><<</span><span class="s">"init"</span><span class="o">>></span><span class="p">,</span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="n">returns</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="o"><<</span><span class="s">"Answers.state"</span><span class="o">>></span><span class="p">,</span><span class="n">stateful</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="n">true</span><span class="p">},</span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="p">#{</span><span class="n">arguments</span><span class="w"> </span><span class="o">=></span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="p">[#{</span><span class="n">name</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="o"><<</span><span class="s">"q"</span><span class="o">>></span><span class="p">,</span><span class="n">type</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="o"><<</span><span class="s">"string"</span><span class="o">>></span><span class="p">},</span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="p">#{</span><span class="n">name</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="o"><<</span><span class="s">"a"</span><span class="o">>></span><span class="p">,</span><span class="n">type</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="o"><<</span><span class="s">"int"</span><span class="o">>></span><span class="p">}],</span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="o"><<</span><span class="s">"new_answer"</span><span class="o">>></span><span class="p">,</span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="n">returns</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="p">#{</span><span class="o"><<</span><span class="s">"map"</span><span class="o">>></span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="p">[</span><span class="o"><<</span><span class="s">"string"</span><span class="o">>></span><span class="p">,</span><span class="o"><<</span><span class="s">"int"</span><span class="o">>></span><span class="p">]},</span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="n">stateful</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="n">false</span><span class="p">}],</span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="o"><<</span><span class="s">"Answers"</span><span class="o">>></span><span class="p">,</span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="n">state</span><span class="w"> </span><span class="o">=></span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="p">#{</span><span class="n">record</span><span class="w"> </span><span class="o">=></span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="p">[#{</span><span class="n">name</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="o"><<</span><span class="s">"a"</span><span class="o">>></span><span class="p">,</span><span class="n">type</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="o"><<</span><span class="s">"Answers.answers"</span><span class="o">>></span><span class="p">}]},</span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="n">type_defs</span><span class="w"> </span><span class="o">=></span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="p">[#{</span><span class="n">name</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="o"><<</span><span class="s">"answers"</span><span class="o">>></span><span class="p">,</span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="n">typedef</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="p">#{</span><span class="o"><<</span><span class="s">"map"</span><span class="o">>></span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="p">[</span><span class="o"><<</span><span class="s">"string"</span><span class="o">>></span><span class="p">,</span><span class="o"><<</span><span class="s">"int"</span><span class="o">>></span><span class="p">]},</span><span class="w"></span>
|
|
|
|
|
<span class="w"> </span><span class="n">vars</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="p">[]}]}}]}</span><span class="w"></span>
|
|
|
|
|
<span class="mi">3</span><span class="o">></span><span class="w"> </span><span class="nn">file</span><span class="p">:</span><span class="nf">write_file</span><span class="p">(</span><span class="s">"aci_test.aci"</span><span class="p">,</span><span class="w"> </span><span class="nn">jsx</span><span class="p">:</span><span class="nf">encode</span><span class="p">(</span><span class="nv">JsonACI</span><span class="p">)).</span><span class="w"></span>
|
|
|
|
|
<span class="n">ok</span><span class="w"></span>
|
|
|
|
|
<span class="mi">4</span><span class="o">></span><span class="w"> </span><span class="p">{</span><span class="n">ok</span><span class="p">,</span><span class="nv">InterfaceStub</span><span class="p">}</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nn">aeso_aci</span><span class="p">:</span><span class="nf">render_aci_json</span><span class="p">(</span><span class="nv">JsonACI</span><span class="p">).</span><span class="w"></span>
|
|
|
|
|
<span class="p">{</span><span class="n">ok</span><span class="p">,</span><span class="o"><<</span><span class="s">"contract Answers =</span><span class="se">\n</span><span class="s"> record state = {a : Answers.answers}</span><span class="se">\n</span><span class="s"> type answers = map(string, int)</span><span class="se">\n</span><span class="s"> function init "</span><span class="p">...</span><span class="o">>></span><span class="p">}</span><span class="w"></span>
|
|
|
|
|
<span class="mi">5</span><span class="o">></span><span class="w"> </span><span class="nn">file</span><span class="p">:</span><span class="nf">write_file</span><span class="p">(</span><span class="s">"aci_test.include"</span><span class="p">,</span><span class="w"> </span><span class="nv">InterfaceStub</span><span class="p">).</span><span class="w"></span>
|
|
|
|
|
<span class="n">ok</span><span class="w"></span>
|
|
|
|
|
<span class="mi">6</span><span class="o">></span><span class="w"> </span><span class="nn">jsx</span><span class="p">:</span><span class="nf">prettify</span><span class="p">(</span><span class="nn">jsx</span><span class="p">:</span><span class="nf">encode</span><span class="p">(</span><span class="nv">JsonACI</span><span class="p">)).</span><span class="w"></span>
|
|
|
|
|
<span class="o"><<</span><span class="s">"[</span><span class="se">\n</span><span class="s"> {</span><span class="se">\n</span><span class="s"> </span><span class="se">\"</span><span class="s">contract</span><span class="se">\"</span><span class="s">: {</span><span class="se">\n</span><span class="s"> </span><span class="se">\"</span><span class="s">functions</span><span class="se">\"</span><span class="s">: [</span><span class="se">\n</span><span class="s"> {</span><span class="se">\n</span><span class="s"> </span><span class="se">\"</span><span class="s">arguments</span><span class="se">\"</span><span class="s">: [],</span><span class="se">\n</span><span class="s"> </span><span class="se">\"</span><span class="s">name</span><span class="se">\"</span><span class="s">: </span><span class="se">\"</span><span class="s">init</span><span class="se">\"</span><span class="s">,</span><span class="se">\n</span><span class="s"> "</span><span class="p">...</span><span class="o">>></span><span class="w"></span>
|
|
|
|
|
</code></pre></div>
|
|
|
|
|
<p>The final call to <code>jsx:prettify(jsx:encode(JsonACI))</code> returns the encoding in a
|
|
|
|
|
more easily readable form. This is what is shown in the description above.</p>
|
|
|
|
|