defmodule IbanEx.Error do @moduledoc false @type error() :: :unsupported_country_code | :invalid_format | :invalid_length | :invalid_checksum | :can_not_parse_map | :length_to_long | :length_to_short | :invalid_bank_code | :invalid_account_number | :invalid_branch_code | :invalid_national_check | atom() @type errors() :: [error()] @errors [ :unsupported_country_code, :invalid_format, :invalid_length, :invalid_checksum, :can_not_parse_map, :length_to_long, :length_to_short, :invalid_bank_code, :invalid_account_number, :invalid_branch_code, :invalid_national_check ] @messages [ unsupported_country_code: "Unsupported country code", invalid_format: "IBAN violates required format", invalid_length: "IBAN violates the required length", invalid_checksum: "IBAN's checksum is invalid", can_not_parse_map: "Can't parse map to IBAN struct", length_to_long: "IBAN longer then required length", length_to_short: "IBAN shorter then required length", invalid_bank_code: "Bank code violates required format", invalid_account_number: "Account number violates required format", invalid_branch_code: "Branch code violates required format", invalid_national_check: "National check symbols violates required format", ] @spec message(error()) :: String.t() def message(error) when error in @errors, do: @messages[error] def message(_error), do: "Undefined error" end