# `Whiff.Extractor`
[🔗](https://github.com/SinAnima/whiff-elixir/blob/main/lib/whiff/extractor.ex#L1)

Behaviour for Elixir-written extractors ("Whiffers").

Callbacks run in BEAM processes **outside** the NIF — never as Rust plugin
callbacks. Prefer `supports?/2` using `Whiff.Input` descriptors (and optional
limited header probes) rather than loading entire large files.

# `native_report`

```elixir
@type native_report() :: map()
```

# `extract`

```elixir
@callback extract(Whiff.Input.t(), native_report()) ::
  {:ok, map()} | {:error, Whiff.Error.t()}
```

# `id`

```elixir
@callback id() :: String.t()
```

# `supports?`

```elixir
@callback supports?(Whiff.Input.t(), native_report()) :: boolean()
```

# `version`

```elixir
@callback version() :: pos_integer()
```

---

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