Packages
claude_code
0.5.0
0.36.5
0.36.4
0.36.3
0.36.2
0.36.1
0.36.0
0.35.0
0.34.0
0.33.1
0.32.2
0.32.0
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.0
0.15.0
0.14.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Claude Agent SDK for Elixir – Build AI agents with Claude Code
Current section
Files
Jump to
Current section
Files
lib/claude_code/content/tool_use.ex
defmodule ClaudeCode.Content.ToolUse do
@moduledoc """
Represents a tool use content block within a Claude message.
Tool use blocks indicate that Claude wants to invoke a specific tool
with the given parameters.
"""
@enforce_keys [:type, :id, :name, :input]
defstruct [:type, :id, :name, :input]
@type t :: %__MODULE__{
type: :tool_use,
id: String.t(),
name: String.t(),
input: map()
}
@doc """
Creates a new ToolUse content block from JSON data.
## Examples
iex> ToolUse.new(%{"type" => "tool_use", "id" => "123", "name" => "Read", "input" => %{}})
{:ok, %ToolUse{type: :tool_use, id: "123", name: "Read", input: %{}}}
iex> ToolUse.new(%{"type" => "text"})
{:error, :invalid_content_type}
"""
@spec new(map()) :: {:ok, t()} | {:error, atom() | {:missing_fields, [atom()]}}
def new(%{"type" => "tool_use"} = data) do
required = ["id", "name", "input"]
missing = Enum.filter(required, &(not Map.has_key?(data, &1)))
if Enum.empty?(missing) do
content = %__MODULE__{
type: :tool_use,
id: data["id"],
name: data["name"],
input: data["input"]
}
{:ok, content}
else
{:error, {:missing_fields, Enum.map(missing, &String.to_atom/1)}}
end
end
def new(_), do: {:error, :invalid_content_type}
@doc """
Type guard to check if a value is a ToolUse content block.
"""
@spec tool_use_content?(any()) :: boolean()
def tool_use_content?(%__MODULE__{type: :tool_use}), do: true
def tool_use_content?(_), do: false
end