Public response parser facade.
Summary
Functions
Applies a v4 normalization mapping to raw response data.
Parses data against a single normalization-slot mapping into target.
Functions
@spec apply_mappings(term(), map(), keyword() | map()) :: {:ok, struct() | [struct()]} | {:error, term()}
Applies a v4 normalization mapping to raw response data.
@spec parse(term(), map() | nil, module(), keyword()) :: {:ok, struct() | [struct()]} | {:error, term()}
Parses data against a single normalization-slot mapping into target.
This is the runtime entry point for the generated per-exchange parse_*
functions (parse_ticker/2, parse_trade/2, …). It applies the Honesty
Rule to the upstream Phase 12 field maps before delegating to
apply_mappings/3:
nilslot (upstream never derived a field map) →{:error, :no_field_map}- non-
nil_unresolved_reason(upstream flagged the slot as not safely derivable) →{:error, {:unresolved, reason}}— the partial field map is not applied, so callers never receive a struct silently built from an incomplete mapping - resolved slot with a non-empty
field_maporbranches→ parsed
opts may carry :market (a market-info map), :symbol, and :currencies
(the loaded currency catalog); all are threaded into the parser context.
Examples
iex> Bourse.Parser.parse(%{}, nil, Bourse.Ticker)
{:error, :no_field_map}
iex> Bourse.Parser.parse(%{}, %{"_unresolved_reason" => "identifier_return"}, Bourse.Market)
{:error, {:unresolved, "identifier_return"}}