Skip to content

Commit 8fe98f0

Browse files
committed
Separate header, body, trailer
1 parent 6137955 commit 8fe98f0

File tree

5 files changed

+197
-152
lines changed

5 files changed

+197
-152
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
java/target/
12
scratch/

go/msg_test.go

Lines changed: 57 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,47 @@ type NoMDEntries struct {
1717
}
1818

1919
type MarketDataSnapshotFullRefresh struct {
20-
BeginString string
21-
MsgType string
22-
MsgSeqNum string
23-
SenderCompID string
24-
TargetCompID string
25-
SendingTime string
26-
SecurityIDSource string
27-
SecurityID string
28-
MDReqID string
29-
NoMDEntries []NoMDEntries
20+
Header struct {
21+
BeginString string
22+
MsgType string
23+
MsgSeqNum string
24+
SenderCompID string
25+
TargetCompID string
26+
SendingTime string
27+
}
28+
29+
Body struct {
30+
SecurityIDSource string
31+
SecurityID string
32+
MDReqID string
33+
NoMDEntries []NoMDEntries
34+
}
35+
36+
Trailer struct {
37+
}
3038
}
3139

3240
var (
3341
data = []byte(`{
34-
"BeginString": "FIXT.1.1",
35-
"MsgType": "W",
36-
"MsgSeqNum": "4567",
37-
"SenderCompID": "SENDER",
38-
"TargetCompID": "TARGET",
39-
"SendingTime": "20160802-21:14:38.717",
40-
"SecurityIDSource": "8",
41-
"SecurityID": "ESU6",
42-
"MDReqID": "789",
43-
"NoMDEntries": [
44-
{ "MDEntryType": "0", "MDEntryPx": "2179.75", "MDEntrySize": "175", "MDEntryDate": "20160812", "MDEntryTime": "21:14:38.688"},
45-
{ "MDEntryType": "1", "MDEntryPx": "2180.25", "MDEntrySize": "125", "MDEntryDate": "20160812", "MDEntryTime": "21:14:38.688"}
46-
]
42+
"Header": {
43+
"BeginString": "FIXT.1.1",
44+
"MsgType": "W",
45+
"MsgSeqNum": "4567",
46+
"SenderCompID": "SENDER",
47+
"TargetCompID": "TARGET",
48+
"SendingTime": "20160802-21:14:38.717"
49+
},
50+
"Body": {
51+
"SecurityIDSource": "8",
52+
"SecurityID": "ESU6",
53+
"MDReqID": "789",
54+
"NoMDEntries": [
55+
{ "MDEntryType": "0", "MDEntryPx": "2179.75", "MDEntrySize": "175", "MDEntryDate": "20160812", "MDEntryTime": "21:14:38.688"},
56+
{ "MDEntryType": "1", "MDEntryPx": "2180.25", "MDEntrySize": "125", "MDEntryDate": "20160812", "MDEntryTime": "21:14:38.688"}
57+
]
58+
},
59+
"Trailer": {
60+
}
4761
}`)
4862
)
4963

@@ -54,32 +68,32 @@ func TestJSON(t *testing.T) {
5468
require.Nil(t, err)
5569

5670
// Then the header fields should be
57-
assert.Equal(t, "FIXT.1.1", msg.BeginString)
58-
assert.Equal(t, "W", msg.MsgType)
59-
assert.Equal(t, "4567", msg.MsgSeqNum)
60-
assert.Equal(t, "SENDER", msg.SenderCompID)
61-
assert.Equal(t, "TARGET", msg.TargetCompID)
62-
assert.Equal(t, "20160802-21:14:38.717", msg.SendingTime)
71+
assert.Equal(t, "FIXT.1.1", msg.Header.BeginString)
72+
assert.Equal(t, "W", msg.Header.MsgType)
73+
assert.Equal(t, "4567", msg.Header.MsgSeqNum)
74+
assert.Equal(t, "SENDER", msg.Header.SenderCompID)
75+
assert.Equal(t, "TARGET", msg.Header.TargetCompID)
76+
assert.Equal(t, "20160802-21:14:38.717", msg.Header.SendingTime)
6377

6478
// And the body fields should be
65-
assert.Equal(t, "8", msg.SecurityIDSource)
66-
assert.Equal(t, "ESU6", msg.SecurityID)
67-
assert.Equal(t, "789", msg.MDReqID)
79+
assert.Equal(t, "8", msg.Body.SecurityIDSource)
80+
assert.Equal(t, "ESU6", msg.Body.SecurityID)
81+
assert.Equal(t, "789", msg.Body.MDReqID)
6882

6983
// And the NoMDEntries repeating group should contain two entries
70-
assert.Len(t, msg.NoMDEntries, 2)
84+
assert.Len(t, msg.Body.NoMDEntries, 2)
7185

7286
// And the first entry should be
73-
assert.Equal(t, "0", msg.NoMDEntries[0].MDEntryType)
74-
assert.Equal(t, "2179.75", msg.NoMDEntries[0].MDEntryPx)
75-
assert.Equal(t, "175", msg.NoMDEntries[0].MDEntrySize)
76-
assert.Equal(t, "20160812", msg.NoMDEntries[0].MDEntryDate)
77-
assert.Equal(t, "21:14:38.688", msg.NoMDEntries[0].MDEntryTime)
87+
assert.Equal(t, "0", msg.Body.NoMDEntries[0].MDEntryType)
88+
assert.Equal(t, "2179.75", msg.Body.NoMDEntries[0].MDEntryPx)
89+
assert.Equal(t, "175", msg.Body.NoMDEntries[0].MDEntrySize)
90+
assert.Equal(t, "20160812", msg.Body.NoMDEntries[0].MDEntryDate)
91+
assert.Equal(t, "21:14:38.688", msg.Body.NoMDEntries[0].MDEntryTime)
7892

7993
// And the second entry should be
80-
assert.Equal(t, "1", msg.NoMDEntries[1].MDEntryType)
81-
assert.Equal(t, "2180.25", msg.NoMDEntries[1].MDEntryPx)
82-
assert.Equal(t, "125", msg.NoMDEntries[1].MDEntrySize)
83-
assert.Equal(t, "20160812", msg.NoMDEntries[1].MDEntryDate)
84-
assert.Equal(t, "21:14:38.688", msg.NoMDEntries[1].MDEntryTime)
94+
assert.Equal(t, "1", msg.Body.NoMDEntries[1].MDEntryType)
95+
assert.Equal(t, "2180.25", msg.Body.NoMDEntries[1].MDEntryPx)
96+
assert.Equal(t, "125", msg.Body.NoMDEntries[1].MDEntrySize)
97+
assert.Equal(t, "20160812", msg.Body.NoMDEntries[1].MDEntryDate)
98+
assert.Equal(t, "21:14:38.688", msg.Body.NoMDEntries[1].MDEntryTime)
8599
}

java/src/test/java/org/fixtradingcommunity/MsgTest.java

Lines changed: 61 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,18 @@
66
import com.google.gson.*;
77

88
public class MsgTest {
9+
static class Header {
10+
String BeginString;
11+
String MsgType;
12+
String MsgSeqNum;
13+
String SenderCompID;
14+
String TargetCompID;
15+
String SendingTime;
16+
}
17+
18+
static class Trailer {
19+
}
20+
921
static class NoMDEntries {
1022
String MDEntryType;
1123
String MDEntryPx;
@@ -15,33 +27,39 @@ static class NoMDEntries {
1527
}
1628

1729
static class MarketDataSnapshotFullRefresh {
18-
String BeginString;
19-
String MsgType;
20-
String MsgSeqNum;
21-
String SenderCompID;
22-
String TargetCompID;
23-
String SendingTime;
24-
String SecurityIDSource;
25-
String SecurityID;
26-
String MDReqID;
27-
NoMDEntries[] NoMDEntries;
30+
static class Body {
31+
String SecurityIDSource;
32+
String SecurityID;
33+
String MDReqID;
34+
NoMDEntries[] NoMDEntries;
35+
}
36+
37+
Header Header;
38+
Body Body;
39+
Trailer Trailer;
2840
}
2941

3042
private final static String data = String.join("\n",
3143
"{",
32-
"\"BeginString\": \"FIXT.1.1\",",
33-
"\"MsgType\": \"W\",",
34-
"\"MsgSeqNum\": \"4567\",",
35-
"\"SenderCompID\": \"SENDER\",",
36-
"\"TargetCompID\": \"TARGET\",",
37-
"\"SendingTime\": \"20160802-21:14:38.717\",",
38-
"\"SecurityIDSource\": \"8\",",
39-
"\"SecurityID\": \"ESU6\",",
40-
"\"MDReqID\": \"789\",",
41-
"\"NoMDEntries\": [",
42-
"{ \"MDEntryType\": \"0\", \"MDEntryPx\": \"2179.75\", \"MDEntrySize\": \"175\", \"MDEntryDate\": \"20160812\", \"MDEntryTime\": \"21:14:38.688\"},",
43-
"{ \"MDEntryType\": \"1\", \"MDEntryPx\": \"2180.25\", \"MDEntrySize\": \"125\", \"MDEntryDate\": \"20160812\", \"MDEntryTime\": \"21:14:38.688\"}",
44-
"]",
44+
"\"Header\": {",
45+
"\"BeginString\": \"FIXT.1.1\",",
46+
"\"MsgType\": \"W\",",
47+
"\"MsgSeqNum\": \"4567\",",
48+
"\"SenderCompID\": \"SENDER\",",
49+
"\"TargetCompID\": \"TARGET\",",
50+
"\"SendingTime\": \"20160802-21:14:38.717\"",
51+
"},",
52+
"\"Body\": {",
53+
"\"SecurityIDSource\": \"8\",",
54+
"\"SecurityID\": \"ESU6\",",
55+
"\"MDReqID\": \"789\",",
56+
"\"NoMDEntries\": [",
57+
"{ \"MDEntryType\": \"0\", \"MDEntryPx\": \"2179.75\", \"MDEntrySize\": \"175\", \"MDEntryDate\": \"20160812\", \"MDEntryTime\": \"21:14:38.688\"},",
58+
"{ \"MDEntryType\": \"1\", \"MDEntryPx\": \"2180.25\", \"MDEntrySize\": \"125\", \"MDEntryDate\": \"20160812\", \"MDEntryTime\": \"21:14:38.688\"}",
59+
"]",
60+
"},",
61+
"\"Trailer\": {",
62+
"}",
4563
"}"
4664
);
4765

@@ -51,33 +69,33 @@ public void testJson() {
5169
MarketDataSnapshotFullRefresh msg = new Gson().fromJson(data, MarketDataSnapshotFullRefresh.class);
5270

5371
// Then the header fields should be
54-
assertEquals("FIXT.1.1", msg.BeginString);
55-
assertEquals("W", msg.MsgType);
56-
assertEquals("4567", msg.MsgSeqNum);
57-
assertEquals("SENDER", msg.SenderCompID);
58-
assertEquals("TARGET", msg.TargetCompID);
59-
assertEquals("20160802-21:14:38.717", msg.SendingTime);
72+
assertEquals("FIXT.1.1", msg.Header.BeginString);
73+
assertEquals("W", msg.Header.MsgType);
74+
assertEquals("4567", msg.Header.MsgSeqNum);
75+
assertEquals("SENDER", msg.Header.SenderCompID);
76+
assertEquals("TARGET", msg.Header.TargetCompID);
77+
assertEquals("20160802-21:14:38.717", msg.Header.SendingTime);
6078

6179
// And the body fields should be
62-
assertEquals("8", msg.SecurityIDSource);
63-
assertEquals("ESU6", msg.SecurityID);
64-
assertEquals("789", msg.MDReqID);
80+
assertEquals("8", msg.Body.SecurityIDSource);
81+
assertEquals("ESU6", msg.Body.SecurityID);
82+
assertEquals("789", msg.Body.MDReqID);
6583

6684
// And the NoMDEntries repeating group should contain two entries
67-
assertEquals(2, msg.NoMDEntries.length);
85+
assertEquals(2, msg.Body.NoMDEntries.length);
6886

6987
// And the first entry should be
70-
assertEquals("0", msg.NoMDEntries[0].MDEntryType);
71-
assertEquals("2179.75", msg.NoMDEntries[0].MDEntryPx);
72-
assertEquals("175", msg.NoMDEntries[0].MDEntrySize);
73-
assertEquals("20160812", msg.NoMDEntries[0].MDEntryDate);
74-
assertEquals("21:14:38.688", msg.NoMDEntries[0].MDEntryTime);
88+
assertEquals("0", msg.Body.NoMDEntries[0].MDEntryType);
89+
assertEquals("2179.75", msg.Body.NoMDEntries[0].MDEntryPx);
90+
assertEquals("175", msg.Body.NoMDEntries[0].MDEntrySize);
91+
assertEquals("20160812", msg.Body.NoMDEntries[0].MDEntryDate);
92+
assertEquals("21:14:38.688", msg.Body.NoMDEntries[0].MDEntryTime);
7593

7694
// And the second entry should be
77-
assertEquals("1", msg.NoMDEntries[1].MDEntryType);
78-
assertEquals("2180.25", msg.NoMDEntries[1].MDEntryPx);
79-
assertEquals("125", msg.NoMDEntries[1].MDEntrySize);
80-
assertEquals("20160812", msg.NoMDEntries[1].MDEntryDate);
81-
assertEquals("21:14:38.688", msg.NoMDEntries[1].MDEntryTime);
95+
assertEquals("1", msg.Body.NoMDEntries[1].MDEntryType);
96+
assertEquals("2180.25", msg.Body.NoMDEntries[1].MDEntryPx);
97+
assertEquals("125", msg.Body.NoMDEntries[1].MDEntrySize);
98+
assertEquals("20160812", msg.Body.NoMDEntries[1].MDEntryDate);
99+
assertEquals("21:14:38.688", msg.Body.NoMDEntries[1].MDEntryTime);
82100
}
83101
}

javascript/msg_test.js

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,56 @@
11
const assert = require('assert');
22

33
const data = '{' +
4-
' "BeginString": "FIXT.1.1",' +
5-
' "MsgType": "W",' +
6-
' "MsgSeqNum": "4567",' +
7-
' "SenderCompID": "SENDER",' +
8-
' "TargetCompID": "TARGET",' +
9-
' "SendingTime": "20160802-21:14:38.717",' +
10-
' "SecurityIDSource": "8",' +
11-
' "SecurityID": "ESU6",' +
12-
' "MDReqID": "789",' +
13-
' "NoMDEntries": [' +
14-
' { "MDEntryType": "0", "MDEntryPx": "2179.75", "MDEntrySize": "175", "MDEntryDate": "20160812", "MDEntryTime": "21:14:38.688"},' +
15-
' { "MDEntryType": "1", "MDEntryPx": "2180.25", "MDEntrySize": "125", "MDEntryDate": "20160812", "MDEntryTime": "21:14:38.688"}' +
16-
' ]' +
4+
' "Header": {' +
5+
' "BeginString": "FIXT.1.1",' +
6+
' "MsgType": "W",' +
7+
' "MsgSeqNum": "4567",' +
8+
' "SenderCompID": "SENDER",' +
9+
' "TargetCompID": "TARGET",' +
10+
' "SendingTime": "20160802-21:14:38.717"' +
11+
' },' +
12+
' "Body": {' +
13+
' "SecurityIDSource": "8",' +
14+
' "SecurityID": "ESU6",' +
15+
' "MDReqID": "789",' +
16+
' "NoMDEntries": [' +
17+
' { "MDEntryType": "0", "MDEntryPx": "2179.75", "MDEntrySize": "175", "MDEntryDate": "20160812", "MDEntryTime": "21:14:38.688"},' +
18+
' { "MDEntryType": "1", "MDEntryPx": "2180.25", "MDEntrySize": "125", "MDEntryDate": "20160812", "MDEntryTime": "21:14:38.688"}' +
19+
' ]' +
20+
' },' +
21+
' "Trailer": {' +
22+
' }' +
1723
'}';
1824

1925
// When the JSON is parsed
2026
var msg = JSON.parse(data);
2127

2228
// Then the header fields should be
23-
assert.equal(msg.BeginString, "FIXT.1.1");
24-
assert.equal(msg.MsgType, "W");
25-
assert.equal(msg.MsgSeqNum, "4567");
26-
assert.equal(msg.SenderCompID, "SENDER");
27-
assert.equal(msg.TargetCompID, "TARGET");
28-
assert.equal(msg.SendingTime, "20160802-21:14:38.717");
29+
assert.equal(msg.Header.BeginString, "FIXT.1.1");
30+
assert.equal(msg.Header.MsgType, "W");
31+
assert.equal(msg.Header.MsgSeqNum, "4567");
32+
assert.equal(msg.Header.SenderCompID, "SENDER");
33+
assert.equal(msg.Header.TargetCompID, "TARGET");
34+
assert.equal(msg.Header.SendingTime, "20160802-21:14:38.717");
2935

3036
// And the body fields should be
31-
assert.equal(msg.SecurityIDSource, "8");
32-
assert.equal(msg.SecurityID, "ESU6");
33-
assert.equal(msg.MDReqID, "789");
37+
assert.equal(msg.Body.SecurityIDSource, "8");
38+
assert.equal(msg.Body.SecurityID, "ESU6");
39+
assert.equal(msg.Body.MDReqID, "789");
3440

3541
// And the NoMDEntries repeating group should contain two entries
36-
assert.equal(msg.NoMDEntries.length, 2);
42+
assert.equal(msg.Body.NoMDEntries.length, 2);
3743

3844
// And the first entry should be
39-
assert.equal(msg.NoMDEntries[0].MDEntryType, "0");
40-
assert.equal(msg.NoMDEntries[0].MDEntryPx, "2179.75");
41-
assert.equal(msg.NoMDEntries[0].MDEntrySize, "175");
42-
assert.equal(msg.NoMDEntries[0].MDEntryDate, "20160812");
43-
assert.equal(msg.NoMDEntries[0].MDEntryTime, "21:14:38.688");
45+
assert.equal(msg.Body.NoMDEntries[0].MDEntryType, "0");
46+
assert.equal(msg.Body.NoMDEntries[0].MDEntryPx, "2179.75");
47+
assert.equal(msg.Body.NoMDEntries[0].MDEntrySize, "175");
48+
assert.equal(msg.Body.NoMDEntries[0].MDEntryDate, "20160812");
49+
assert.equal(msg.Body.NoMDEntries[0].MDEntryTime, "21:14:38.688");
4450

4551
// And the second entry should be
46-
assert.equal(msg.NoMDEntries[1].MDEntryType, "1");
47-
assert.equal(msg.NoMDEntries[1].MDEntryPx, "2180.25");
48-
assert.equal(msg.NoMDEntries[1].MDEntrySize, "125");
49-
assert.equal(msg.NoMDEntries[1].MDEntryDate, "20160812");
50-
assert.equal(msg.NoMDEntries[1].MDEntryTime, "21:14:38.688");
52+
assert.equal(msg.Body.NoMDEntries[1].MDEntryType, "1");
53+
assert.equal(msg.Body.NoMDEntries[1].MDEntryPx, "2180.25");
54+
assert.equal(msg.Body.NoMDEntries[1].MDEntrySize, "125");
55+
assert.equal(msg.Body.NoMDEntries[1].MDEntryDate, "20160812");
56+
assert.equal(msg.Body.NoMDEntries[1].MDEntryTime, "21:14:38.688");

0 commit comments

Comments
 (0)