# `Unifex.CodeGenerator`
[🔗](https://github.com/membraneframework/unifex/blob/v1.2.5/lib/unifex/code_generator.ex#L1)

Behaviour for code generation.

# `code_t`

```elixir
@type code_t() :: String.t()
```

# `generated_code_t`

```elixir
@type generated_code_t() :: %{
  header: code_t(),
  types_header: code_t(),
  source: code_t(),
  generator: t()
}
```

# `t`

```elixir
@type t() :: module()
```

# `generate_main_header`

```elixir
@callback generate_main_header(specs :: Unifex.Specs.t()) :: code_t()
```

# `generate_source`

```elixir
@callback generate_source(specs :: Unifex.Specs.t()) :: code_t()
```

# `generate_types_header`

```elixir
@callback generate_types_header(specs :: Unifex.Specs.t()) :: code_t()
```

# `identification_constant`

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

# `interface_io_name`

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

# `bundlex_interface`

```elixir
@spec bundlex_interface(Bundlex.Project.native_interface()) ::
  Unifex.Specs.interface_t()
```

# `generate_code`

```elixir
@spec generate_code(Unifex.Specs.t()) :: [generated_code_t()]
```

Generates boilerplate code using generator implementation from `Unifex.CodeGenerators`.

# `interface_generator`

```elixir
@spec interface_generator(Unifex.Specs.interface_t()) :: t()
```

---

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