mirror of
https://github.com/extism/extism.git
synced 2026-04-23 03:00:11 -04:00
Bumps [ex_doc](https://github.com/elixir-lang/ex_doc) from 0.29.0 to 0.29.1. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/elixir-lang/ex_doc/blob/main/CHANGELOG.md">ex_doc's changelog</a>.</em></p> <blockquote> <h2>v0.29.1 (2022-11-21)</h2> <ul> <li> <p>Enhancements</p> <ul> <li>Add optional function annotations</li> <li>Support media print on stylesheets</li> <li>Add download ePub link to footer</li> <li>Support extras for Erlang</li> <li>Add tooltip to functions on sidebar</li> <li>Disable spellcheck and autocorrect on search input</li> </ul> </li> <li> <p>Bug fix</p> <ul> <li>Special handle functions called <code>record/*</code> in Erlang</li> </ul> </li> <li> <p>Deprecations</p> <ul> <li>Rename <code>:groups_for_functions</code> to <code>:groups_for_docs</code></li> </ul> </li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="1439375934"><code>1439375</code></a> Release v0.29.1</li> <li><a href="e4ae7ce037"><code>e4ae7ce</code></a> Rename groups_for_functions as groups_for_docs</li> <li><a href="b17fcd278a"><code>b17fcd2</code></a> Add optional function annotations (<a href="https://github-redirect.dependabot.com/elixir-lang/ex_doc/issues/1627">#1627</a>)</li> <li><a href="69a74c029c"><code>69a74c0</code></a> Firefox H2 print rendering fix (<a href="https://github-redirect.dependabot.com/elixir-lang/ex_doc/issues/1630">#1630</a>)</li> <li><a href="623ac03fea"><code>623ac03</code></a> mix format</li> <li><a href="a9284d50e3"><code>a9284d5</code></a> Consistenly use <strong>doc</strong> for metadata</li> <li><a href="a4ea93cf26"><code>a4ea93c</code></a> Rename internal nodes for consistency</li> <li><a href="5a0aa08550"><code>5a0aa08</code></a> Simplify handling of empty nodes in module summary</li> <li><a href="148ad54a6d"><code>148ad54</code></a> Use v1.13 formatting rules</li> <li><a href="4b05286003"><code>4b05286</code></a> mix format</li> <li>Additional commits viewable in <a href="https://github.com/elixir-lang/ex_doc/compare/v0.29.0...v0.29.1">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Extism
Extism Host SDK for Elixir and Erlang
Docs
Read the docs on hexdocs.pm.
Installation
You can find this package on hex.pm.
def deps do
[
{:extism, "~> 0.0.1-rc.6"}
]
end
Getting Started
Example
# Create a context for which plugins can be allocated and cleaned
ctx = Extism.Context.new()
# point to some wasm code, this is the count_vowels example that ships with extism
manifest = %{ wasm: [ %{ path: "/Users/ben/code/extism/wasm/code.wasm" } ]}
{:ok, plugin} = Extism.Context.new_plugin(ctx, manifest, false)
# {:ok,
# %Extism.Plugin{
# resource: 0,
# reference: #Reference<0.520418104.1263009793.80956>
# }}
{:ok, output} = Extism.Plugin.call(plugin, "count_vowels", "this is a test")
# {:ok, "{\"count\": 4}"}
{:ok, result} = JSON.decode(output)
# {:ok, %{"count" => 4}}
# free up the context and any plugins we allocated
Extism.Context.free(ctx)
Modules
The two primary modules you should learn are:
Context
The Context can be thought of as a session. You need a context to interact with the Extism runtime. The context holds your plugins and when you free the context, it frees your plugins. It's important to free up your context and plugins when you are done with them.
ctx = Extism.Context.new()
# frees all the plugins
Extism.Context.reset(ctx)
# frees the context and all its plugins
Extism.Context.free(ctx)
Plugin
The Plugin represents an instance of your WASM program from the given manifest. The key method to know here is Extism.Plugin#call which takes a function name to invoke and some input data, and returns the results from the plugin.
{:ok, plugin} = Extism.Context.new_plugin(ctx, manifest, false)
{:ok, output} = Extism.Plugin.call(plugin, "count_vowels", "this is a test")