Skip to content

Make EncodeJson/DecodeJson middlewares public #590

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 15, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions lib/tesla/middleware/json.ex
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ defmodule Tesla.Middleware.JSON do
mix deps.compile tesla
```

If you only need to encode the request body or decode the response body,
you can use `Tesla.Middleware.EncodeJson` or `Tesla.Middleware.DecodeJson` directly instead.

## Examples

```
Expand Down Expand Up @@ -61,6 +64,7 @@ defmodule Tesla.Middleware.JSON do

It is used by `Tesla.Middleware.EncodeJson`.
"""
@spec encode(Tesla.Env.t(), keyword()) :: Tesla.Env.result()
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added spec (here and below) since these functions are public.

def encode(env, opts) do
with true <- encodable?(env),
{:ok, body} <- encode_body(env.body, opts) do
Expand Down Expand Up @@ -98,6 +102,7 @@ defmodule Tesla.Middleware.JSON do

It is used by `Tesla.Middleware.DecodeJson`.
"""
@spec decode(Tesla.Env.t(), keyword()) :: Tesla.Env.result()
def decode(env, opts) do
with true <- decodable?(env, opts),
{:ok, body} <- decode_body(env.body, opts) do
Expand Down Expand Up @@ -151,7 +156,15 @@ defmodule Tesla.Middleware.JSON do
end

defmodule Tesla.Middleware.DecodeJson do
@moduledoc false
@moduledoc """
Decodes response body as JSON.

Only decodes the body if the `Content-Type` header suggests
that the body is JSON.
"""
@moduledoc since: "1.8.0"
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Next version.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The funny part is that I do know people using the module already 😄


@impl Tesla.Middleware
def call(env, next, opts) do
opts = opts || []

Expand All @@ -162,7 +175,12 @@ defmodule Tesla.Middleware.DecodeJson do
end

defmodule Tesla.Middleware.EncodeJson do
@moduledoc false
@moduledoc """
Encodes request body as JSON.
"""
@moduledoc since: "1.8.0"

@impl Tesla.Middleware
def call(env, next, opts) do
opts = opts || []

Expand Down