Current section
Files
Jump to
Current section
Files
lib/absinthe/compose.ex
defmodule Absinthe.Compose do
def resolve(_parent, _args, resolution) do
%{
schema: schema,
definition: %{
schema_node: %{__private__: private},
name: name
}
} = resolution
compose = get_in(private, [:meta, :compose])
compose_module = Keyword.fetch!(compose, :from)
opts = Keyword.get(compose, :opts, [])
{query, variables} = Absinthe.Compose.QueryGenerator.render(resolution)
with {:ok, downstream} <- proxy(compose_module, query, variables, opts, resolution) do
downstream = Map.get(downstream, name)
value = Absinthe.Compose.Downstream.translate(downstream, resolution.definition, schema)
{:ok, value}
end
end
def proxy(module, query, variables, opts, resolution) when is_atom(module) do
apply(module, :resolve, [query, variables, opts, resolution])
end
end