# `Wasmex.EngineConfig`

Configures a `Wasmex.Engine`.

## Options

  * `:consume_fuel` - Whether or not to consume fuel when executing Wasm instructions. This defaults to `false`.
  * `:cranelift_opt_level` - Optimization level for the Cranelift code generator. This defaults to `:none`.
  * `:wasm_backtrace_details` - Whether or not backtraces in traps will parse debug info in the Wasm file to have filename/line number information. This defaults to `false`.
  * `:debug_info` - Configures whether DWARF debug information will be emitted during compilation. This defaults to `false`.
  * `:memory64` - Whether or not to use 64-bit memory. This defaults to `false`.
  * `:wasm_component_model` - Whether or not to use the WebAssembly component model. This defaults to `true`.

## Example

    iex> _config = %Wasmex.EngineConfig{}
    ...>           |> Wasmex.EngineConfig.consume_fuel(true)
    ...>           |> Wasmex.EngineConfig.cranelift_opt_level(:speed)
    ...>           |> Wasmex.EngineConfig.wasm_backtrace_details(false)

# `t`

```elixir
@type t() :: %Wasmex.EngineConfig{
  consume_fuel: boolean(),
  cranelift_opt_level: :none | :speed | :speed_and_size,
  debug_info: boolean(),
  memory64: boolean(),
  wasm_backtrace_details: boolean(),
  wasm_component_model: boolean()
}
```

# `consume_fuel`

```elixir
@spec consume_fuel(t(), boolean()) :: t()
```

Configures whether execution of WebAssembly will "consume fuel" to
either halt or yield execution as desired.

This can be used to deterministically prevent infinitely-executing
WebAssembly code by instrumenting generated code to consume fuel as it
executes. When fuel runs out a trap is raised.

Note that a `Wasmex.Store` starts with no fuel, so if you enable this option
you'll have to be sure to pour some fuel into `Wasmex.Store` before
executing some code. See `Wasmex.StoreOrCaller.set_fuel/2`.

## Example

    iex> config = %Wasmex.EngineConfig{}
    ...>          |> Wasmex.EngineConfig.consume_fuel(true)
    iex> config.consume_fuel
    true

# `cranelift_opt_level`

```elixir
@spec cranelift_opt_level(t(), :none | :speed | :speed_and_size) :: t()
```

Configures the Cranelift code generator optimization level.

Allows one of the following values:

* `:none` - No optimizations performed, minimizes compilation time by disabling most optimizations.
* `:speed` - Generates the fastest possible code, but may take longer.
* `:speed_and_size` - Similar to `speed`, but also performs transformations aimed at reducing code size.

# `memory64`

```elixir
@spec memory64(t(), boolean()) :: t()
```

Configures whether the WebAssembly memory type is 64-bit.

## Example

    iex> config = %Wasmex.EngineConfig{}
    ...>          |> Wasmex.EngineConfig.memory64(true)
    iex> config.memory64
    true

# `wasm_backtrace_details`

```elixir
@spec wasm_backtrace_details(t(), boolean()) :: t()
```

Configures whether backtraces in traps will parse debug info in the Wasm
file to have filename/line number information.

When enabled this will causes modules to retain debugging information
found in Wasm binaries. This debug information will be used when a trap
happens to symbolicate each stack frame and attempt to print a
filename/line number for each Wasm frame in the stack trace.

## Example

    iex> config = %Wasmex.EngineConfig{}
    ...>          |> Wasmex.EngineConfig.wasm_backtrace_details(true)
    iex> config.wasm_backtrace_details
    true

---

*Consult [api-reference.md](api-reference.md) for complete listing*
