Packages
claude_code
0.36.1
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/text_block.ex
defmodule ClaudeCode.Content.TextBlock do
@moduledoc """
Represents a text content block within a Claude message.
Text blocks contain plain text content that represents Claude's response
or user input.
"""
use ClaudeCode.JSONEncoder
@enforce_keys [:type, :text]
defstruct [:type, :text, :citations]
@type t :: %__MODULE__{
type: :text,
text: String.t(),
citations: [map()] | nil
}
@doc """
Creates a new Text content block from JSON data.
## Examples
iex> Text.new(%{"type" => "text", "text" => "Hello!"})
{:ok, %Text{type: :text, text: "Hello!"}}
iex> Text.new(%{"type" => "tool_use", "text" => "Hi"})
{:error, :invalid_content_type}
"""
@spec new(map()) :: {:ok, t()} | {:error, atom()}
def new(%{"type" => "text"} = data) do
case data do
%{"text" => text} when is_binary(text) ->
citations = parse_citations(data["citations"])
{:ok, %__MODULE__{type: :text, text: text, citations: citations}}
%{"text" => _} ->
{:error, :invalid_text}
_ ->
{:error, :missing_text}
end
end
def new(_), do: {:error, :invalid_content_type}
defp parse_citations(nil), do: nil
defp parse_citations(citations) when is_list(citations), do: citations
defp parse_citations(_), do: nil
end
defimpl String.Chars, for: ClaudeCode.Content.TextBlock do
def to_string(%{text: text}), do: text
end