Packages
electric_client
0.1.0-dev-17
0.10.3
0.10.2
0.10.1
0.10.1-beta-1
0.10.0
0.9.5-beta-1
0.9.4
0.9.4-beta-1
0.9.3
0.9.2
0.9.1
0.9.0
0.8.3
0.8.3-beta-1
0.8.2
0.8.1
0.8.0
0.8.0-beta-1
0.7.3
0.7.2
0.7.1
0.7.0
0.6.5
0.6.5-beta-5
0.6.5-beta-4
0.6.5-beta-3
0.6.5-beta-2
0.6.5-beta-1
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.0
0.5.0-beta-1
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.3.0-beta.4
0.3.0-beta.3
0.3.0-beta.2
0.2.6-pre-1
retired
0.2.6-beta.1
0.2.6-beta.0
0.2.5
0.2.4
0.2.4-pre-8
0.2.4-pre-7
0.2.4-pre-6
0.2.4-pre-5
0.2.4-pre-4
0.2.4-pre-3
0.2.4-pre-2
0.2.4-pre-1
0.2.3
0.2.3-rc-1
0.2.2
0.2.2-rc-1
0.2.1
0.2.1-rc-3
0.2.1-rc-2
0.2.1-rc-1
0.2.0
0.1.2
0.1.1
0.1.0
0.1.0-dev-9
0.1.0-dev-8
0.1.0-dev-7
0.1.0-dev-6
0.1.0-dev-5
0.1.0-dev-4
0.1.0-dev-3
0.1.0-dev-2
0.1.0-dev-17
0.1.0-dev-16
0.1.0-dev-15
0.1.0-dev-14
0.1.0-dev-13
0.1.0-dev-12
0.1.0-dev-11
0.1.0-dev-10
0.1.0-dev
Elixir client for ElectricSQL
Current section
Files
Jump to
Current section
Files
lib/electric/client/fetch/response.ex
defmodule Electric.Client.Fetch.Response do
alias Electric.Client
defstruct [
:status,
:last_offset,
:shape_id,
:schema,
:next_cursor,
body: [],
headers: %{}
]
@type t :: %__MODULE__{
status: non_neg_integer(),
body: [map()],
headers: %{String.t() => [String.t()]},
last_offset: nil | Client.Offset.t(),
shape_id: nil | Client.shape_id(),
schema: nil | Client.schema(),
next_cursor: nil | Client.cursor()
}
@doc false
def decode!(status, headers, body) when is_integer(status) and is_map(headers) do
%__MODULE__{
status: status,
headers: decode_headers(headers),
body: body,
shape_id: decode_shape_id(headers),
last_offset: decode_offset(headers),
schema: decode_schema(headers),
next_cursor: decode_next_cursor(headers)
}
end
defp decode_headers(headers) do
Map.new(headers, fn {k, v} -> {k, List.wrap(v)} end)
end
defp decode_shape_id(%{"electric-shape-id" => shape_id}) do
unlist(shape_id)
end
defp decode_shape_id(_headers), do: nil
defp decode_offset(%{"electric-chunk-last-offset" => offset}) do
offset |> unlist() |> Client.Offset.from_string!()
end
defp decode_offset(_headers), do: nil
defp decode_schema(%{"electric-schema" => schema}) do
schema |> unlist() |> Jason.decode!(keys: :atoms)
end
defp decode_schema(_headers), do: nil
defp unlist([elem | _]), do: elem
defp unlist([]), do: nil
defp unlist(value), do: value
defp decode_next_cursor(%{"electric-next-cursor" => cursor}) do
cursor |> unlist() |> String.to_integer()
end
defp decode_next_cursor(_), do: nil
end