Use Livebook to open this notebook and explore new ideas.
It is easy to get started, on your machine or the cloud.
# Orb Temperature Converter
```elixir
Mix.install([
{:orb, "~> 0.0.48"},
{:wasmex, "~> 0.8.3"}
])
```
## Define our temperature converter module using Orb
```elixir
defmodule TemperatureConverter do
use Orb
Orb.I32.export_enum([:celsius, :fahrenheit])
global do
@mode 0
end
defw celsius_to_fahrenheit(celsius: F32), F32 do
celsius * (9.0 / 5.0) + 32.0
end
defw fahrenheit_to_celsius(fahrenheit: F32), F32 do
(fahrenheit - 32.0) * (5.0 / 9.0)
end
defw convert_temperature(temperature: F32), F32 do
if @mode === @celsius do
celsius_to_fahrenheit(temperature)
else
fahrenheit_to_celsius(temperature)
end
end
defw set_mode(mode: I32) do
@mode = mode
end
end
```
## We can compile this module to the WebAssembly text format
```elixir
Orb.to_wat(TemperatureConverter)
|> IO.puts()
```
## We can run the WebAssembly module in Elixir using Wasmex
```elixir
{:ok, pid} = Wasmex.start_link(%{bytes: Orb.to_wat(TemperatureConverter)})
# Wasmex.call_function(pid, :fahrenheit_to_celsius, [72.0])
Wasmex.call_function(pid, :convert_temperature, [72.0])
|> IO.inspect()
Wasmex.call_function(pid, :set_mode, [1])
Wasmex.call_function(pid, :convert_temperature, [72.0])
|> IO.inspect()
```
See source