ExDaytona.RequestBuilder (ex_daytona v0.2.0)

Copy Markdown View Source

Helper functions for building Tesla requests

Summary

Functions

Add optional parameters to the request.

Add non-optional parameters to the request.

This function ensures that the body parameter is always set.

Evaluate the response from a Tesla request. Decode the response for a Tesla request.

Specify the request method when building a request.

Specify the request URL when building a request.

Types

response_mapping()

@type response_mapping() :: [{status_code(), false | [] | %{} | module()}]

status_code()

@type status_code() :: :default | 100..599

Functions

add_optional_params(request, definitions, list)

@spec add_optional_params(map(), %{optional(atom()) => atom()}, keyword()) :: map()

Add optional parameters to the request.

Parameters

  • request (Map) - Collected request options
  • definitions (Map) - Map of parameter name to parameter location.
  • options (KeywordList) - The provided optional parameters

Returns

Map

add_param(request, location, key, value)

@spec add_param(map(), atom(), atom(), any()) :: map()

Add non-optional parameters to the request.

Parameters

  • request (Map) - Collected request options
  • location (atom) - Where to put the parameter
  • key (atom) - The name of the parameter
  • value (any) - The value of the parameter

Returns

Map

ensure_body(request)

@spec ensure_body(map()) :: map()

This function ensures that the body parameter is always set.

When using Tesla with the httpc adapter (the default adapter), there is a bug where POST, PATCH and PUT requests will fail if the body is empty.

Parameters

  • request (Map) - Collected request options

Returns

Map

evaluate_response(result, mapping, opts \\ [])

@spec evaluate_response(Tesla.Env.result(), response_mapping(), keyword()) ::
  {:ok,
   struct()
   | [struct()]
   | list()
   | map()
   | Tesla.Env.t()
   | ExDaytona.Response.t()}
  | {:error, Tesla.Env.t() | any()}

Evaluate the response from a Tesla request. Decode the response for a Tesla request.

Parameters

  • result (Tesla.Env.result()): The response from Tesla.request/2.
  • mapping ([{http_status, struct}]): The mapping for status to struct for decoding.

Returns

  • {:ok, struct}, {:ok, [struct]}, {:ok, decoded_json} (for []/%{} mappings) or {:ok, Tesla.Env.t()} on success
  • {:ok, %ExDaytona.Response{}} when called with response: :full — the same decoded value in data, plus status, normalized headers, request id, rate-limit state, parsed Retry-After, and retry count
  • {:error, term} on failure

method(request, method)

@spec method(map(), atom()) :: map()

Specify the request method when building a request.

Does not override the method if one has already been specified.

Parameters

  • request (Map) - Collected request options
  • method (atom) - Request method

Returns

Map

url(request, url)

@spec url(map(), String.t()) :: map()

Specify the request URL when building a request.

Does not override the url if one has already been specified.

Parameters

  • request (Map) - Collected request options
  • url (String) - Request URL

Returns

Map