Packages
claude_code
0.35.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_block.ex
defmodule ClaudeCode.Content.ToolUseBlock 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.
"""
use ClaudeCode.JSONEncoder
@enforce_keys [:type, :id, :name, :input]
defstruct [:type, :id, :name, :input, :caller]
@type t :: %__MODULE__{
type: :tool_use,
id: String.t(),
name: String.t(),
input: map(),
caller: map() | nil
}
@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"],
caller: data["caller"]
}
{:ok, content}
else
{:error, {:missing_fields, Enum.map(missing, &String.to_atom/1)}}
end
end
def new(_), do: {:error, :invalid_content_type}
end