Packages
tesla
1.18.0
1.20.0
1.18.3
1.18.2
1.18.1
1.18.0
1.17.0
1.16.0
1.15.3
1.15.2
1.15.1
1.15.0
1.14.3
1.14.2
1.14.1
1.14.0
1.13.2
1.13.1
1.13.0
1.12.3
1.12.2
1.12.1
1.12.0
1.11.2
1.11.1
1.11.0
1.10.3
1.10.2
1.10.1
1.10.0
1.9.0
1.8.1
retired
1.8.0
1.7.0
1.6.1
1.6.0
1.5.1
1.5.0
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.3
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.0
1.0.0
1.0.0-beta.1
0.10.0
0.9.0
0.8.0
0.7.2
0.7.1
0.7.0
0.6.0
0.5.2
0.5.1
0.5.0
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.2.2
0.2.1
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
HTTP client library, with support for middleware and multiple adapters.
Security advisory:
This version has known vulnerabilities.
View advisories
Current section
Files
Jump to
Current section
Files
lib/tesla/open_api/query_params.ex
defmodule Tesla.OpenAPI.QueryParams do
@moduledoc """
A collection of query parameter definitions for `Tesla.Middleware.Query`.
`Tesla.OpenAPI.QueryParams` keeps static query parameter metadata separate from
per-request values. Since query parameter definitions usually come from a
static operation specification, prefer defining the collection in a module
attribute, storing it in `t:Tesla.Env.private/0`, and passing only dynamic values
through `env.query`.
defmodule MyApi.Operation.ListItems do
alias Tesla.OpenAPI.{QueryParam, QueryParams}
@query_params QueryParams.new!([
QueryParam.new!("filter"),
QueryParam.new!("ids", style: :pipe_delimited)
])
@private QueryParams.put_private(@query_params)
def request(client) do
Tesla.get(client, "/items",
query: %{
"filter" => [status: "open", owner: "yordis"],
"ids" => [10, 20],
"debug" => true
},
private: @private
)
end
end
"""
alias Tesla.OpenAPI.QueryParam
alias Tesla.Param
@enforce_keys [:definitions]
defstruct [:definitions]
@opaque t :: %__MODULE__{
definitions: [QueryParam.t()]
}
@private_key :tesla_query_params
@spec new!([QueryParam.t()]) :: t()
def new!(definitions) when is_list(definitions) do
%__MODULE__{definitions: Param.validate_definitions!(definitions, QueryParam, :query)}
end
@doc """
Adds query parameter definitions to `t:Tesla.Env.private/0`.
defmodule MyApi.Operation.ListItems do
@query_params Tesla.OpenAPI.QueryParams.new!([Tesla.OpenAPI.QueryParam.new!("page")])
@private Tesla.OpenAPI.QueryParams.put_private(@query_params)
def request(client) do
Tesla.get(client, "/items",
query: %{"page" => 2},
private: @private
)
end
end
"""
@spec put_private(t()) :: Tesla.Env.private()
def put_private(%__MODULE__{} = query_params) do
put_private(%{}, query_params)
end
@spec put_private(Tesla.Env.private(), t()) :: Tesla.Env.private()
def put_private(private, %__MODULE__{} = query_params) when is_map(private) do
Map.put(private, @private_key, query_params)
end
@doc false
@spec fetch_private(Tesla.Env.private()) :: {:ok, t()} | :error
def fetch_private(private) when is_map(private) do
case Map.fetch(private, @private_key) do
{:ok, %__MODULE__{} = query_params} ->
{:ok, query_params}
{:ok, _value} ->
:error
:error ->
:error
end
end
@doc false
@spec definitions(t()) :: [QueryParam.t()]
def definitions(%__MODULE__{definitions: definitions}) do
definitions
end
end