Current section
Files
Jump to
Current section
Files
lib/codex/protocol/elicitation.ex
defmodule Codex.Protocol.Elicitation do
@moduledoc """
MCP elicitation request and action types.
"""
@type action :: :accept | :decline | :cancel
defmodule Request do
@moduledoc "MCP elicitation request"
use TypedStruct
typedstruct do
field(:server_name, String.t(), enforce: true)
field(:id, String.t(), enforce: true)
field(:message, String.t(), enforce: true)
end
@spec from_map(map()) :: t()
def from_map(data) do
%__MODULE__{
server_name: Map.fetch!(data, "server_name"),
id: Map.fetch!(data, "id"),
message: Map.fetch!(data, "message")
}
end
end
@spec encode_action(action()) :: String.t()
def encode_action(:accept), do: "accept"
def encode_action(:decline), do: "decline"
def encode_action(:cancel), do: "cancel"
@spec decode_action(String.t()) :: action()
def decode_action("accept"), do: :accept
def decode_action("decline"), do: :decline
def decode_action("cancel"), do: :cancel
end