22 lines
604 B
Elixir
22 lines
604 B
Elixir
|
defmodule Jason.Fragment do
|
||
|
@moduledoc ~S"""
|
||
|
Provides a way to inject an already-encoded JSON structure into a
|
||
|
to-be-encoded structure in optimized fashion.
|
||
|
|
||
|
This avoids a decoding/encoding round-trip for the subpart.
|
||
|
|
||
|
This feature can be used for caching parts of the JSON, or delegating
|
||
|
the generation of the JSON to a third-party system (e.g. Postgres).
|
||
|
"""
|
||
|
|
||
|
defstruct [:encode]
|
||
|
|
||
|
def new(iodata) when is_list(iodata) or is_binary(iodata) do
|
||
|
%__MODULE__{encode: fn _ -> iodata end}
|
||
|
end
|
||
|
|
||
|
def new(encode) when is_function(encode, 1) do
|
||
|
%__MODULE__{encode: encode}
|
||
|
end
|
||
|
end
|