lib/rpc/client/spec.ex

defmodule Soroban.RPC.Client.Spec do
  @moduledoc """
  Specifies expected behaviour of an HTTP client.
  """

  alias Soroban.RPC.{Error, HTTPError}

  @type endpoint :: String.t()
  @type headers :: [{binary(), binary()}, ...]
  @type options :: Keyword.t()
  @type params :: map() | nil
  @type success_response :: {:ok, map()}
  @type error_response :: {:error, Error.t() | HTTPError.t()}

  @callback request(
              endpoint :: endpoint(),
              url :: binary(),
              headers :: headers(),
              params :: params(),
              options :: options()
            ) :: success_response() | error_response()
end