Pristine.SDK.ProviderProfile (Pristine v0.3.1)

Copy Markdown View Source

Provider-specific runtime profile for shared error normalization and result classification.

Summary

Types

retry_group_selector()

@type retry_group_selector() :: :all | [String.t()] | nil

status_retry_override()

@type status_retry_override() :: %{
  optional(:retry?) => boolean(),
  optional(:retry_groups) => retry_group_selector(),
  optional(:telemetry_classification) => atom(),
  optional(:breaker_outcome) => :success | :failure | :ignore,
  optional(:limiter_backoff_ms) => non_neg_integer() | :retry_after
}

t()

@type t() :: %Pristine.SDK.ProviderProfile{
  additional_data_fields: [String.t()],
  body_code_fields: [String.t()],
  body_code_map: %{optional(String.t()) => atom()},
  body_request_id_fields: [String.t()],
  connection_code: atom(),
  default_retry_group: String.t() | nil,
  documentation_url_fields: [String.t()],
  message_fields: [String.t()],
  provider: atom() | String.t(),
  rate_limit_code: atom(),
  rate_limit_detector: (integer(), map(), term() -> boolean()) | nil,
  rate_limit_retry_groups: retry_group_selector(),
  request_id_headers: [String.t()],
  response_error_code: atom(),
  retry_after_reset_at_headers: [String.t()],
  retryable_groups: retry_group_selector(),
  status_code_map: %{optional(integer()) => atom()},
  status_retry_overrides: %{optional(integer()) => status_retry_override()},
  status_retry_ranges: [map()],
  transport_retry_groups: retry_group_selector(),
  validation_code: atom()
}

Functions

additional_data(profile, body)

@spec additional_data(t() | nil, term()) :: term()

connection_code(profile)

@spec connection_code(t() | nil) :: atom() | nil

documentation_url(profile, body)

@spec documentation_url(t() | nil, term()) :: String.t() | nil

header_value(headers, name)

@spec header_value(map() | list(), String.t()) :: String.t() | nil

message(profile, body)

@spec message(t() | nil, term()) :: String.t() | nil

new(opts)

@spec new(keyword() | map()) :: {:ok, t()} | {:error, term()}

new!(opts)

@spec new!(keyword() | map()) :: t()

normalize_body(body)

@spec normalize_body(term()) :: term()

normalize_headers(headers)

@spec normalize_headers(map() | list() | term()) :: map()

override_applies?(override, profile, endpoint)

@spec override_applies?(status_retry_override(), t() | nil, map() | nil) :: boolean()

override_retry?(override, profile, endpoint)

@spec override_retry?(status_retry_override(), t() | nil, map() | nil) :: boolean()

provider_code(profile, status, body, arg4)

@spec provider_code(t() | nil, integer() | nil, term(), boolean()) :: atom() | nil

rate_limit_retryable?(profile, endpoint)

@spec rate_limit_retryable?(t() | nil, map() | nil) :: boolean()

rate_limited?(arg1, status, headers, context_data)

@spec rate_limited?(t() | nil, integer() | nil, map() | list(), term()) :: boolean()

request_id(profile, body, headers)

@spec request_id(t() | nil, term(), map() | list()) :: String.t() | nil

retry_after_ms(profile, headers)

@spec retry_after_ms(t() | nil, map() | list()) :: non_neg_integer() | nil

retry_group(arg1, endpoint)

@spec retry_group(t() | nil, map() | nil) :: String.t() | nil

retryable_group?(profile, endpoint)

@spec retryable_group?(t() | nil, map() | nil) :: boolean()

status_retry_override(arg1, status)

@spec status_retry_override(t() | nil, integer() | nil) ::
  status_retry_override() | nil

transport_retryable?(profile, endpoint)

@spec transport_retryable?(t() | nil, map() | nil) :: boolean()

validation_code(profile)

@spec validation_code(t() | nil) :: atom() | nil