Browse Source

[elixir/plug] Clean up boilerplate when encoding to Jason (#9301)

José Valim 9 months ago
parent
commit
7c7cceea1a

+ 2 - 2
frameworks/Elixir/plug/lib/framework_benchmarks/handlers/cached-world.ex

@@ -11,10 +11,10 @@ defmodule FrameworkBenchmarks.Handlers.CachedWorld do
         :rand.uniform(10_000)
       end)
 
-    {:ok, json} =
+    json =
       ids
       |> Enum.map(&FrameworkBenchmarks.CachedWorld.get/1)
-      |> Jason.encode()
+      |> Jason.encode_to_iodata!()
 
     conn
     |> Plug.Conn.put_resp_content_type("application/json")

+ 2 - 4
frameworks/Elixir/plug/lib/framework_benchmarks/handlers/db.ex

@@ -5,11 +5,9 @@ defmodule FrameworkBenchmarks.Handlers.DB do
   def handle(conn) do
     id = :rand.uniform(10_000)
 
-    {:ok, json} =
+    json =
       FrameworkBenchmarks.Repo.get(FrameworkBenchmarks.Models.World, id)
-      |> Map.from_struct()
-      |> Map.drop([:__meta__])
-      |> Jason.encode()
+      |> Jason.encode_to_iodata!()
 
     conn
     |> Plug.Conn.put_resp_content_type("application/json")

+ 1 - 1
frameworks/Elixir/plug/lib/framework_benchmarks/handlers/json.ex

@@ -3,7 +3,7 @@ defmodule FrameworkBenchmarks.Handlers.JSON do
   This is the handle for the /json route
   """
   def handle(conn) do
-    {:ok, json} = Jason.encode(%{message: "Hello, World!"})
+    json = Jason.encode_to_iodata!(%{message: "Hello, World!"})
 
     conn
     |> Plug.Conn.put_resp_content_type("application/json")

+ 3 - 11
frameworks/Elixir/plug/lib/framework_benchmarks/handlers/query.ex

@@ -5,7 +5,7 @@ defmodule FrameworkBenchmarks.Handlers.Query do
   def handle(conn) do
     number_of_queries = FrameworkBenchmarks.Handlers.Helpers.parse_queries(conn, "queries")
 
-    records =
+    json =
       1..number_of_queries
       |> Enum.map(fn _ ->
         :rand.uniform(10_000)
@@ -15,16 +15,8 @@ defmodule FrameworkBenchmarks.Handlers.Query do
           FrameworkBenchmarks.Repo.get(FrameworkBenchmarks.Models.World, &1)
         end)
       )
-      |> Enum.map(&Task.await(&1))
-
-    {:ok, json} =
-      records
-      |> Enum.map(fn record ->
-        record
-        |> Map.from_struct()
-        |> Map.drop([:__meta__])
-      end)
-      |> Jason.encode()
+      |> Enum.map(&Task.await(&1, :infinity))
+      |> Jason.encode_to_iodata!()
 
     conn
     |> Plug.Conn.put_resp_content_type("application/json")

+ 3 - 11
frameworks/Elixir/plug/lib/framework_benchmarks/handlers/update.ex

@@ -22,7 +22,7 @@ defmodule FrameworkBenchmarks.Handlers.Update do
         :rand.uniform(10_000)
       end)
 
-    records =
+    json =
       ids
       |> Enum.map(
         &Task.async(fn ->
@@ -38,16 +38,8 @@ defmodule FrameworkBenchmarks.Handlers.Update do
           |> FrameworkBenchmarks.Repo.update!()
         end)
       )
-      |> Enum.map(&Task.await(&1))
-
-    {:ok, json} =
-      records
-      |> Enum.map(fn record ->
-        record
-        |> Map.from_struct()
-        |> Map.drop([:__meta__])
-      end)
-      |> Jason.encode()
+      |> Enum.map(&Task.await(&1, :infinity))
+      |> Jason.encode_to_iodata!()
 
     conn
     |> Plug.Conn.put_resp_content_type("application/json")

+ 1 - 0
frameworks/Elixir/plug/lib/framework_benchmarks/models/world.ex

@@ -1,6 +1,7 @@
 defmodule FrameworkBenchmarks.Models.World do
   use Ecto.Schema
 
+  @derive {Jason.Encoder, only: [:id, :randomnumber]}
   schema "world" do
     field(:randomnumber, :integer)
   end