# `Gemini.Types.ToolSerialization`
[🔗](https://github.com/nshkrdotcom/gemini_ex/blob/v0.15.0/lib/gemini/types/tool_serialization.ex#L1)

Pure data transformation utilities to serialize ALTAR ADM tool structures
into the exact JSON maps expected by the Gemini API.

- Converts snake_case atom keys to camelCase string keys
- Shapes `FunctionDeclaration` into the correct `Tool` list payload
- Shapes `ToolConfig` into `%{functionCallingConfig: %{...}}`

# `api_tool`

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

# `api_tool_config`

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

# `api_tool_list`

```elixir
@type api_tool_list() :: [api_tool()]
```

# `to_api_tool_config`

```elixir
@spec to_api_tool_config(Altar.ADM.ToolConfig.t()) :: api_tool_config()
```

Convert ADM `ToolConfig` into Gemini API `toolConfig` map.

Input:
%ToolConfig{mode: :auto | :any | :none, function_names: ["..."]}

Output:
%{
  functionCallingConfig: %{
    mode: "AUTO" | "ANY" | "NONE",
    allowedFunctionNames: ["..."] # present only when non-empty
  }
}

# `to_api_tool_list`

```elixir
@spec to_api_tool_list(list()) :: api_tool_list()
```

Convert a list of tools into a Gemini API `tools` list.

Supports:
- ADM `FunctionDeclaration` structs
- Built-in tools (`googleSearch`, `urlContext`, `codeExecution`)
- Atom shorthand for built-ins (`:google_search`, `:url_context`, `:code_execution`)

---

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