Skip to content

Commit ee5a04b

Browse files
committed
chore: move magic FIX tags into constants
1 parent c8f5cc2 commit ee5a04b

4 files changed

Lines changed: 66 additions & 32 deletions

File tree

lua/fix/consts.lua

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,29 @@ M.FixVersion = {
1212
FIX_5_0 = "FIXT.1.1",
1313
}
1414

15+
---@enum FixTag
16+
M.FixTag = {
17+
BeginSeqNo = 7,
18+
BeginString = 8,
19+
ClOrdID = 11,
20+
EndSeqNo = 16,
21+
ExecID = 17,
22+
MsgSeqNum = 34,
23+
MsgType = 35,
24+
NewSeqNo = 36,
25+
OrderQty = 38,
26+
OrdType = 40,
27+
PossDupFlag = 43,
28+
Price = 44,
29+
SenderCompID = 49,
30+
SendingTime = 52,
31+
Side = 54,
32+
Symbol = 55,
33+
TargetCompID = 56,
34+
Text = 58,
35+
TimeInForce = 59,
36+
GapFillFlag = 123,
37+
ExecType = 150,
38+
}
39+
1540
return M

lua/fix/document.lua

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ local Field = require("fix.field")
55
local Message = require("fix.message")
66

77
local M = {}
8+
local FixTag = Consts.FixTag
89

910
local versions = {
1011
["FIX.2.7"] = Consts.FixVersion.FIX_2_7,
@@ -28,19 +29,22 @@ end
2829
local function get_version(fields)
2930
local begin_string
3031
for _, field in ipairs(fields) do
31-
if field.tag == 8 then
32+
if field.tag == FixTag.BeginString then
3233
begin_string = field.value
3334
break
3435
end
3536
end
3637
if not begin_string then
37-
vim.notify_once("Missing BeginString (tag 8)", vim.log.levels.WARN)
38+
vim.notify_once(string.format("Missing BeginString (tag %d)", FixTag.BeginString), vim.log.levels.WARN)
3839
return nil
3940
end
4041

4142
local version = versions[begin_string]
4243
if not version then
43-
vim.notify_once("Unknown BeginString (tag 8): " .. begin_string, vim.log.levels.WARN)
44+
vim.notify_once(
45+
string.format("Unknown BeginString (tag %d): %s", FixTag.BeginString, begin_string),
46+
vim.log.levels.WARN
47+
)
4448
return nil
4549
end
4650

lua/fix/formatters/message.lua

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,54 @@
1+
local Consts = require("fix.consts")
2+
13
local M = {}
4+
local FixTag = Consts.FixTag
25

36
--- @param message Message
47
function M.default(message)
5-
local msg_type_name = message:field(35).value_text or "Unknown"
8+
local msg_type_name = message:field(FixTag.MsgType).value_text or "Unknown"
69

710
local text = string.format(
811
"%s: %s: %s=>%s | %s",
9-
message:field(52).value or "???",
10-
message:field(34).value or "???",
11-
message:field(49).value or "???",
12-
message:field(56).value or "???",
13-
message:field(35).value_text or "???"
12+
message:field(FixTag.SendingTime).value or "???",
13+
message:field(FixTag.MsgSeqNum).value or "???",
14+
message:field(FixTag.SenderCompID).value or "???",
15+
message:field(FixTag.TargetCompID).value or "???",
16+
message:field(FixTag.MsgType).value_text or "???"
1417
)
1518

16-
if message:field(43).value == "Y" then
19+
if message:field(FixTag.PossDupFlag).value == "Y" then
1720
text = text .. " [POSS DUP]"
1821
end
1922

2023
local details = ""
2124
if msg_type_name == "ExecutionReport" then
22-
local exec_type = message:field(150).value_text or "???"
25+
local exec_type = message:field(FixTag.ExecType).value_text or "???"
2326
if exec_type == "Trade" or exec_type == "TradeCorrect" then
24-
local client_order_id = message:field(11).value
25-
local exec_id = message:field(17).value or "MISSING"
26-
local price = message:field(44).value or "MKT"
27-
local amount = message:field(38).value or "???"
27+
local client_order_id = message:field(FixTag.ClOrdID).value
28+
local exec_id = message:field(FixTag.ExecID).value or "MISSING"
29+
local price = message:field(FixTag.Price).value or "MKT"
30+
local amount = message:field(FixTag.OrderQty).value or "???"
2831
details = string.format("%s %s@%s ClOrdId=%s ExecId=%s", exec_type, amount, price, client_order_id, exec_id)
2932
else
3033
details = exec_type
3134
end
3235
elseif msg_type_name == "NewOrderSingle" then
33-
local ord_type = message:field(40).value_text
34-
local time_in_force = message:field(59).value_text
35-
local side = message:field(54).value_text
36-
local amount = message:field(38).value or "???"
37-
local price = message:field(44).value or "MKT"
38-
local symbol = message:field(55).value or "???"
36+
local ord_type = message:field(FixTag.OrdType).value_text
37+
local time_in_force = message:field(FixTag.TimeInForce).value_text
38+
local side = message:field(FixTag.Side).value_text
39+
local amount = message:field(FixTag.OrderQty).value or "???"
40+
local price = message:field(FixTag.Price).value or "MKT"
41+
local symbol = message:field(FixTag.Symbol).value or "???"
3942
details = string.format("%s %s %s %s %s @ %s", side, time_in_force, ord_type, amount, symbol, price)
4043
elseif msg_type_name == "Logout" then
41-
details = message:field(58).value or ""
44+
details = message:field(FixTag.Text).value or ""
4245
elseif msg_type_name == "ResendRequest" then
43-
local begin_seq_no = message:field(7).value or "MISSING"
44-
local end_seq_no = message:field(16).value or "MISSING"
46+
local begin_seq_no = message:field(FixTag.BeginSeqNo).value or "MISSING"
47+
local end_seq_no = message:field(FixTag.EndSeqNo).value or "MISSING"
4548
details = string.format("%s - %s", begin_seq_no, end_seq_no)
4649
elseif msg_type_name == "SequenceReset" then
47-
local is_fill_gap = message:field(123).value == "Y"
48-
local new_seq_num = message:field(36).value or "MISSING"
50+
local is_fill_gap = message:field(FixTag.GapFillFlag).value == "Y"
51+
local new_seq_num = message:field(FixTag.NewSeqNo).value or "MISSING"
4952
if is_fill_gap then
5053
details = string.format("Gap Fill to %s", new_seq_num)
5154
else

lua/fix/snacks.lua

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1+
local Consts = require("fix.consts")
12
local document = require("fix.document")
23

34
local M = {}
5+
local FixTag = Consts.FixTag
46

57
local function append_message_items(items, message, message_idx, file)
6-
local msg_type = message:field(35).value_text
7-
local sender = message:field(49).value
8-
local seq_no = message:field(34).value
8+
local msg_type = message:field(FixTag.MsgType).value_text
9+
local sender = message:field(FixTag.SenderCompID).value
10+
local seq_no = message:field(FixTag.MsgSeqNum).value
911

1012
for _, field in pairs(message:list_fields()) do
1113
local text = string.format(
@@ -73,9 +75,9 @@ function M.open()
7375
format = function(item, _)
7476
local field = item.field
7577
local message = item.message
76-
local msg_type = message:field(35)
77-
local sender = message:field(49).value
78-
local seq_no = message:field(34).value
78+
local msg_type = message:field(FixTag.MsgType)
79+
local sender = message:field(FixTag.SenderCompID).value
80+
local seq_no = message:field(FixTag.MsgSeqNum).value
7981

8082
local ret = {}
8183
ret[#ret + 1] = { string.format("#%s %s => %s ", seq_no, sender, msg_type.value_text), "Comment" }

0 commit comments

Comments
 (0)