Robinhood's symbol mapping.
Its native symbol is already canonical BASE-QUOTE — BTC-USD — so the conversion
is effectively identity. It is declared anyway, for two reasons.
The contract is uniform: every venue implements both directions, so nothing above the facade needs to know that one venue's conversion happens to be free.
And it is a defensive boundary. Any un-canonical form the venue ever returns is
normalised here rather than leaking upward — a lowercase btc-usd, or a separatorless
form from an endpoint nobody has looked at lately. Running the normaliser over an
already-canonical string costs nothing; one venue quietly emitting a form the rest of the
family does not recognise costs a symbol that matches no catalogue entry and collects
nothing.
Summary
Functions
@spec mapping() :: DpExchange.Core.CanonicalPair.mapping()
The mapping, exposed so the conformance suite can drive CanonicalPair with it.
@spec quotes() :: [String.t()]
The quote currencies this venue settles in.