Packages
claude_code
0.13.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_result_block.ex
defmodule ClaudeCode.Content.ToolResultBlock do
@moduledoc """
Represents a tool result content block within a Claude message.
Tool result blocks contain the output from a tool execution, which can be
either successful results or error messages.
"""
@enforce_keys [:type, :tool_use_id, :content, :is_error]
defstruct [:type, :tool_use_id, :content, :is_error]
@type t :: %__MODULE__{
type: :tool_result,
tool_use_id: String.t(),
content: String.t(),
is_error: boolean()
}
@doc """
Creates a new ToolResult content block from JSON data.
## Examples
iex> ToolResult.new(%{"type" => "tool_result", "tool_use_id" => "123", "content" => "OK"})
{:ok, %ToolResult{type: :tool_result, tool_use_id: "123", content: "OK", is_error: false}}
iex> ToolResult.new(%{"type" => "text"})
{:error, :invalid_content_type}
"""
@spec new(map()) :: {:ok, t()} | {:error, atom() | {:missing_fields, [atom()]}}
def new(%{"type" => "tool_result"} = data) do
required = ["tool_use_id", "content"]
missing = Enum.filter(required, &(not Map.has_key?(data, &1)))
if Enum.empty?(missing) do
result = %__MODULE__{
type: :tool_result,
tool_use_id: data["tool_use_id"],
content: data["content"],
is_error: Map.get(data, "is_error", false)
}
{:ok, result}
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 ToolResult content block.
"""
@spec tool_result_content?(any()) :: boolean()
def tool_result_content?(%__MODULE__{type: :tool_result}), do: true
def tool_result_content?(_), do: false
end