defmodule Ibex.Messages.Types do @type message_type :: atom() @type code_map :: map() @type market_data_type :: :bid | :ask | :trades @type ticker_id :: integer() defmodule Inbound do @type message_type :: Ibex.Messages.Types.message_type() @codes %{ 1 => :tick_price, 2 => :tick_size, 3 => :order_status, 4 => :err_msg, 5 => :open_order, 6 => :acct_value, 7 => :portfolio_value, 8 => :acct_update, 9 => :next_valid, 10 => :contract_data, 11 => :execution_data, 12 => :market_depth, 13 => :market_depth, 14 => :news_bulletins, 15 => :managed_accts, 16 => :receive_fa, 17 => :historical_data, 18 => :bond_contract, 19 => :scanner_parameters, 20 => :scanner_data, 21 => :tick_option, 45 => :tick_generic, 46 => :tick_string, 47 => :tick_efp, 49 => :current_time, 50 => :real_time_bars, 51 => :fundamental_data, 52 => :contract_data_end, 53 => :open_order_end, 54 => :acct_download_end, 55 => :execution_data_end, 56 => :delta_neutral_validation, 57 => :tick_snapshot_end, 58 => :market_data_type, 59 => :commission_report, 61 => :position_data, 62 => :position_end, 63 => :account_summary, 64 => :account_summary_end, 65 => :verify_message_api, 66 => :verify_completed, 67 => :display_group_list, 68 => :display_group_updated, 69 => :verify_and_auth_message_api, 70 => :verify_and_auth_completed, 71 => :position_multi, 72 => :position_multi_end, 73 => :account_update_multi, 74 => :account_update_multi_end, 75 => :security_definition_option_parameter, 76 => :security_definition_option_parameter_end, 77 => :soft_dollar_tiers, 78 => :family_codes, 79 => :symbol_samples, 80 => :mkt_depth_exchanges, 81 => :tick_req_params, 82 => :smart_components, 83 => :news_article, 84 => :tick_news, 85 => :news_providers, 86 => :historical_news, 87 => :historical_news_end, 88 => :head_timestamp, 89 => :histogram_data, 90 => :historical_data_update, 91 => :reroute_mkt_data_req, 92 => :reroute_mkt_depth_req, 93 => :market_rule, 94 => :pnl, 95 => :pnl_single, 96 => :historical_ticks, 97 => :historical_ticks_bid_ask, 98 => :historical_ticks_last, 99 => :tick_by_tick, 100 => :order_bound, 101 => :completed_order, 102 => :completed_orders_end, 103 => :replace_fa_end, 104 => :wsh_meta_data, 105 => :wsh_event_data, 106 => :historical_schedule, 107 => :user_info } @spec parse(integer()) :: message_type() def parse(code) do Map.get(@codes, code, nil) end end defmodule Outbound do @type message_type :: Ibex.Messages.Types.message_type() @codes %{ :req_mkt_data => 1, :cancel_mkt_data => 2, :place_order => 3, :cancel_order => 4, :req_open_orders => 5, :req_acct_data => 6, :req_executions => 7, :req_ids => 8, :req_contract_data => 9, :req_mkt_depth => 10, :cancel_mkt_depth => 11, :req_news_bulletins => 12, :cancel_news_bulletins => 13, :set_server_loglevel => 14, :req_auto_open_orders => 15, :req_all_open_orders => 16, :req_managed_accts => 17, :req_fa => 18, :replace_fa => 19, :req_historical_data => 20, :exercise_options => 21, :req_scanner_subscription => 22, :cancel_scanner_subscription => 23, :req_scanner_parameters => 24, :cancel_historical_data => 25, :req_current_time => 49, :req_real_time_bars => 50, :cancel_real_time_bars => 51, :req_fundamental_data => 52, :cancel_fundamental_data => 53, :req_calc_implied_volat => 54, :req_calc_option_price => 55, :cancel_calc_implied_volat => 56, :cancel_calc_option_price => 57, :req_global_cancel => 58, :req_market_data_type => 59, :req_positions => 61, :req_account_summary => 62, :cancel_account_summary => 63, :cancel_positions => 64, :verify_request => 65, :verify_message => 66, :query_display_groups => 67, :subscribe_to_group_events => 68, :update_display_group => 69, :unsubscribe_from_group_events => 70, :start_api => 71, :verify_and_auth_request => 72, :verify_and_auth_message => 73, :req_positions_multi => 74, :cancel_positions_multi => 75, :req_account_updates_multi => 76, :cancel_account_updates_multi => 77, :req_sec_def_opt_params => 78, :req_soft_dollar_tiers => 79, :req_family_codes => 80, :req_matching_symbols => 81, :req_mkt_depth_exchanges => 82, :req_smart_components => 83, :req_news_article => 84, :req_news_providers => 85, :req_historical_news => 86, :req_head_timestamp => 87, :req_histogram_data => 88, :cancel_histogram_data => 89, :cancel_head_timestamp => 90, :req_market_rule => 91, :req_pnl => 92, :cancel_pnl => 93, :req_pnl_single => 94, :cancel_pnl_single => 95, :req_historical_ticks => 96, :req_tick_by_tick_data => 97, :cancel_tick_by_tick_data => 98, :req_completed_orders => 99, :req_wsh_meta_data => 100, :cancel_wsh_meta_data => 101, :req_wsh_event_data => 102, :cancel_wsh_event_data => 103, :req_user_info => 104 } @spec parse(message_type()) :: integer() def parse(mtype) do Map.get(@codes, mtype, nil) end end end