Current section
Files
Jump to
Current section
Files
lib/supabase/postgrest/schema_decoder.ex
defmodule Supabase.PostgREST.SchemaDecoder do
@moduledoc "Custom body decoder that decodes a PostgREST response into a custom schema"
alias Supabase.Fetcher.JSONDecoder
alias Supabase.Fetcher.Response
@behaviour Supabase.Fetcher.BodyDecoder
@impl true
def decode(%Response{} = resp, opts \\ []) do
schema = Keyword.fetch!(opts, :schema)
with {:ok, body} <- JSONDecoder.decode(resp, keys: :atoms) do
cond do
resp.status < 400 and is_list(body) -> {:ok, Enum.map(body, &struct(schema, &1))}
resp.status < 400 -> {:ok, struct(schema, body)}
true -> {:ok, body}
end
end
end
end