Packages
claude_code
0.24.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/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.
"""
@enforce_keys [:type, :text]
defstruct [:type, :text]
@type t :: %__MODULE__{
type: :text,
text: String.t()
}
@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) ->
{:ok, %__MODULE__{type: :text, text: text}}
%{"text" => _} ->
{:error, :invalid_text}
_ ->
{:error, :missing_text}
end
end
def new(_), do: {:error, :invalid_content_type}
@doc """
Type guard to check if a value is a Text content block.
"""
@spec text_content?(any()) :: boolean()
def text_content?(%__MODULE__{type: :text}), do: true
def text_content?(_), do: false
end
defimpl String.Chars, for: ClaudeCode.Content.TextBlock do
def to_string(%{text: text}), do: text
end
defimpl Jason.Encoder, for: ClaudeCode.Content.TextBlock do
def encode(block, opts) do
block
|> ClaudeCode.JSONEncoder.to_encodable()
|> Jason.Encoder.Map.encode(opts)
end
end
defimpl JSON.Encoder, for: ClaudeCode.Content.TextBlock do
def encode(block, encoder) do
block
|> ClaudeCode.JSONEncoder.to_encodable()
|> JSON.Encoder.Map.encode(encoder)
end
end