README.md

# wasmify

[![Package Version](https://img.shields.io/hexpm/v/wasmify)](https://hex.pm/packages/wasmify)
[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/wasmify/)

Use WASM in Gleam !

## Usage
(see [`/example/src/example.gleam`](https://github.com/endercheif/wasmify/blob/master/example/src/example.gleam) for a demo)

decompiled `math.wasm`
```wasm
(module
  (import "gleam" "print" (func $print (param f32) (result f32)))
  (func (export "pythagorean") (param f32 f32) (result f32)
    (local $x f32)
    (local $y f32)

    local.get 0
    local.get 0
    f32.mul
    local.set $x

    local.get 1
    local.get 1
    f32.mul
    local.set $y

    local.get $x
    local.get $y
   	
    f32.add
	f32.sqrt

    call $print
  )
)

```

`mod.gleam`
```gleam
import gleam/float
import wasmify/types.{Get}
import wasmify/wasm.{function, get, instance, load_wasm, load_wasm_sync, module, namespace} // load_wasm_sync only works in non browser runtimes and returns Result(Promise(file), String)

fn print_float(value: Float) -> Float {
  io.println("result is: " <> float.to_string(value))
  value
}

pub fn main() {
    let assert Ok(file) = load_wasm_sync
    let wasm = module(file) |> instance([namespace("gleam", [#("print", function(print_int))])])

    let assert Ok(pythagorean): Get(fn (Float, Float) -> Float) = get(wasm, "pythagorean")

    let res = pythagorean(3.0, 4.0)

    case 5.0 == pythagorean(3.0, 4.0) {
        True -> io.print("all good!")
        False -> panic
    }
}

```

## Installation

This package can be added to your Gleam project:

```sh
gleam add wasmify
```

and its documentation can be found at <https://hexdocs.pm/wasmify>.