lib/nostr/event/types/text_event.ex

defmodule Nostr.Event.Types.TextEvent do
  @moduledoc """
  Text event management, including event creation and parsing

  Represents messages sent through the nostr protocol intented for display in clients
  """

  require Logger

  defstruct event: %Nostr.Event{}

  alias Nostr.Event
  alias Nostr.Event.Types.TextEvent

  @type t :: %TextEvent{}

  @kind 1

  @spec create(binary(), K256.Schnorr.verifying_key()) :: TextEvent.t()
  def create(content, pubkey) do
    event =
      %{Event.create(content, pubkey) | kind: @kind}
      |> Event.add_id()

    %TextEvent{event: event}
  end

  def parse(%{"content" => content} = body) do
    event = %{Event.parse(body) | content: content}

    case event.kind do
      @kind -> {:ok, %TextEvent{event: event}}
      kind -> {:error, "Tried to parse a text event with kind #{kind} instead of #{@kind}"}
    end
  end
end