src/finanza@currency@catalog.erl

-module(finanza@currency@catalog).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/finanza/currency/catalog.gleam").
-export([usd/0, eur/0, jpy/0, gbp/0, chf/0, cad/0, aud/0, cny/0, hkd/0, sgd/0, krw/0, inr/0, brl/0, mxn/0, zar/0, all/0, find/1]).

-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.

?MODULEDOC(
    " A static snapshot of 15 major ISO 4217 currencies.\n"
    "\n"
    " The snapshot is informational and is not refreshed against the\n"
    " ISO 4217 maintenance register. For currencies outside the\n"
    " catalogue, build a [`Currency`](../currency.html#Currency) directly\n"
    " with [`currency.new_currency`](../currency.html#new_currency).\n"
).

-file("src/finanza/currency/catalog.gleam", 115).
-spec build(binary(), integer(), binary(), binary()) -> finanza@currency:currency().
build(Code, Exponent, Symbol, Name) ->
    C@1 = case finanza@currency:new_currency(Code, Exponent, Symbol, Name) of
        {ok, C} -> C;
        _assert_fail ->
            erlang:error(#{gleam_error => let_assert,
                        message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
                        file => <<?FILEPATH/utf8>>,
                        module => <<"finanza/currency/catalog"/utf8>>,
                        function => <<"build"/utf8>>,
                        line => 122,
                        value => _assert_fail,
                        start => 3649,
                        'end' => 3784,
                        pattern_start => 3660,
                        pattern_end => 3665})
    end,
    C@1.

-file("src/finanza/currency/catalog.gleam", 13).
?DOC(" US Dollar — `USD`, exponent 2, symbol `$`.\n").
-spec usd() -> finanza@currency:currency().
usd() ->
    build(<<"USD"/utf8>>, 2, <<"$"/utf8>>, <<"US Dollar"/utf8>>).

-file("src/finanza/currency/catalog.gleam", 18).
?DOC(" Euro — `EUR`, exponent 2, symbol `€`.\n").
-spec eur() -> finanza@currency:currency().
eur() ->
    build(<<"EUR"/utf8>>, 2, <<"€"/utf8>>, <<"Euro"/utf8>>).

-file("src/finanza/currency/catalog.gleam", 23).
?DOC(" Japanese Yen — `JPY`, exponent 0, symbol `¥`.\n").
-spec jpy() -> finanza@currency:currency().
jpy() ->
    build(<<"JPY"/utf8>>, 0, <<"¥"/utf8>>, <<"Japanese Yen"/utf8>>).

-file("src/finanza/currency/catalog.gleam", 28).
?DOC(" Pound Sterling — `GBP`, exponent 2, symbol `£`.\n").
-spec gbp() -> finanza@currency:currency().
gbp() ->
    build(<<"GBP"/utf8>>, 2, <<"£"/utf8>>, <<"Pound Sterling"/utf8>>).

-file("src/finanza/currency/catalog.gleam", 33).
?DOC(" Swiss Franc — `CHF`, exponent 2, symbol `CHF`.\n").
-spec chf() -> finanza@currency:currency().
chf() ->
    build(<<"CHF"/utf8>>, 2, <<"CHF"/utf8>>, <<"Swiss Franc"/utf8>>).

-file("src/finanza/currency/catalog.gleam", 38).
?DOC(" Canadian Dollar — `CAD`, exponent 2, symbol `$`.\n").
-spec cad() -> finanza@currency:currency().
cad() ->
    build(<<"CAD"/utf8>>, 2, <<"$"/utf8>>, <<"Canadian Dollar"/utf8>>).

-file("src/finanza/currency/catalog.gleam", 43).
?DOC(" Australian Dollar — `AUD`, exponent 2, symbol `$`.\n").
-spec aud() -> finanza@currency:currency().
aud() ->
    build(<<"AUD"/utf8>>, 2, <<"$"/utf8>>, <<"Australian Dollar"/utf8>>).

-file("src/finanza/currency/catalog.gleam", 48).
?DOC(" Renminbi — `CNY`, exponent 2, symbol `¥`.\n").
-spec cny() -> finanza@currency:currency().
cny() ->
    build(<<"CNY"/utf8>>, 2, <<"¥"/utf8>>, <<"Renminbi"/utf8>>).

-file("src/finanza/currency/catalog.gleam", 53).
?DOC(" Hong Kong Dollar — `HKD`, exponent 2, symbol `HK$`.\n").
-spec hkd() -> finanza@currency:currency().
hkd() ->
    build(<<"HKD"/utf8>>, 2, <<"HK$"/utf8>>, <<"Hong Kong Dollar"/utf8>>).

-file("src/finanza/currency/catalog.gleam", 58).
?DOC(" Singapore Dollar — `SGD`, exponent 2, symbol `S$`.\n").
-spec sgd() -> finanza@currency:currency().
sgd() ->
    build(<<"SGD"/utf8>>, 2, <<"S$"/utf8>>, <<"Singapore Dollar"/utf8>>).

-file("src/finanza/currency/catalog.gleam", 63).
?DOC(" South Korean Won — `KRW`, exponent 0, symbol `₩`.\n").
-spec krw() -> finanza@currency:currency().
krw() ->
    build(<<"KRW"/utf8>>, 0, <<"₩"/utf8>>, <<"South Korean Won"/utf8>>).

-file("src/finanza/currency/catalog.gleam", 68).
?DOC(" Indian Rupee — `INR`, exponent 2, symbol `₹`.\n").
-spec inr() -> finanza@currency:currency().
inr() ->
    build(<<"INR"/utf8>>, 2, <<"₹"/utf8>>, <<"Indian Rupee"/utf8>>).

-file("src/finanza/currency/catalog.gleam", 73).
?DOC(" Brazilian Real — `BRL`, exponent 2, symbol `R$`.\n").
-spec brl() -> finanza@currency:currency().
brl() ->
    build(<<"BRL"/utf8>>, 2, <<"R$"/utf8>>, <<"Brazilian Real"/utf8>>).

-file("src/finanza/currency/catalog.gleam", 78).
?DOC(" Mexican Peso — `MXN`, exponent 2, symbol `$`.\n").
-spec mxn() -> finanza@currency:currency().
mxn() ->
    build(<<"MXN"/utf8>>, 2, <<"$"/utf8>>, <<"Mexican Peso"/utf8>>).

-file("src/finanza/currency/catalog.gleam", 83).
?DOC(" South African Rand — `ZAR`, exponent 2, symbol `R`.\n").
-spec zar() -> finanza@currency:currency().
zar() ->
    build(<<"ZAR"/utf8>>, 2, <<"R"/utf8>>, <<"South African Rand"/utf8>>).

-file("src/finanza/currency/catalog.gleam", 89).
?DOC(
    " All currencies in the static catalogue, in the order they appear\n"
    " on this page.\n"
).
-spec all() -> list(finanza@currency:currency()).
all() ->
    [usd(),
        eur(),
        jpy(),
        gbp(),
        chf(),
        cad(),
        aud(),
        cny(),
        hkd(),
        sgd(),
        krw(),
        inr(),
        brl(),
        mxn(),
        zar()].

-file("src/finanza/currency/catalog.gleam", 111).
?DOC(
    " Look up a catalogue currency by its ISO 4217 alpha-3 code.\n"
    " Codes are compared case-sensitively in upper case.\n"
).
-spec find(binary()) -> {ok, finanza@currency:currency()} | {error, nil}.
find(Code) ->
    gleam@list:find(all(), fun(C) -> finanza@currency:code(C) =:= Code end).