# `Kinda.CodeGen.DeclarationSurfaces`
[🔗](https://github.com/beaver-lodge/kinda/blob/main/lib/codegen/declaration_surfaces.ex#L1)

The resolved declaration surfaces of a generator module.

`from_generator/2` loads a generator module's declaration source (a module
implementing `declaration_manifest/0` and optionally `kinds/0`) and resolves
it into the source declaration manifest and the final declaration manifest,
normalizing NIF declarations and merging the NIFs implied by resource kinds.

# `source_declaration_manifest`

```elixir
@type source_declaration_manifest() :: Kinda.CodeGen.DeclarationManifest.t() | nil
```

# `t`

```elixir
@type t() :: %Kinda.CodeGen.DeclarationSurfaces{
  declaration_manifest: Kinda.CodeGen.DeclarationManifest.t(),
  source_declaration_manifest: source_declaration_manifest()
}
```

# `declaration_manifest`

```elixir
@spec declaration_manifest(t()) :: Kinda.CodeGen.DeclarationManifest.t()
```

# `from_generator`

```elixir
@spec from_generator(module(), module()) :: t()
```

# `from_parts`

```elixir
@spec from_parts(source_declaration_manifest(), Kinda.CodeGen.DeclarationManifest.t()) ::
  t()
```

# `load_source`

```elixir
@spec load_source(module()) :: source_declaration_manifest()
```

# `nif_decls`

```elixir
@spec nif_decls(t()) :: [Kinda.CodeGen.NIFDecl.t()]
```

# `signature_manifest`

```elixir
@spec signature_manifest(t()) :: map() | nil
```

# `source_declaration_manifest`

```elixir
@spec source_declaration_manifest(t()) :: source_declaration_manifest()
```

# `type_decls`

```elixir
@spec type_decls(t()) :: [Kinda.CodeGen.TypeDecl.t()]
```

---

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