From 4f2c5582d1752fdd97b0930e57964f739e8599b3 Mon Sep 17 00:00:00 2001 From: David Bartley Date: Sat, 6 Apr 2024 01:04:32 -0700 Subject: [PATCH] Pass by value in `MarshalXML`. --- constants.go | 160 +++++++------- constants_test.go | 480 ++++++++++++++++++++++++++++++++++++++++++ generate_constants.py | 18 +- invstmt.go | 8 +- types.go | 10 +- types_test.go | 26 +++ 6 files changed, 611 insertions(+), 91 deletions(-) diff --git a/constants.go b/constants.go index 6233d5f..732aada 100644 --- a/constants.go +++ b/constants.go @@ -69,11 +69,11 @@ func (e *ofxVersion) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error return e.FromString(value) } -func (e *ofxVersion) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e ofxVersion) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(ofxVersions[*e-1], start) + enc.EncodeElement(ofxVersions[e-1], start) return nil } @@ -137,11 +137,11 @@ func (e *acctType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *acctType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e acctType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(acctTypes[*e-1], start) + enc.EncodeElement(acctTypes[e-1], start) return nil } @@ -218,11 +218,11 @@ func (e *trnType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *trnType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e trnType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(trnTypes[*e-1], start) + enc.EncodeElement(trnTypes[e-1], start) return nil } @@ -284,11 +284,11 @@ func (e *imageType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *imageType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e imageType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(imageTypes[*e-1], start) + enc.EncodeElement(imageTypes[e-1], start) return nil } @@ -350,11 +350,11 @@ func (e *imageRefType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) erro return e.FromString(value) } -func (e *imageRefType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e imageRefType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(imageRefTypes[*e-1], start) + enc.EncodeElement(imageRefTypes[e-1], start) return nil } @@ -416,11 +416,11 @@ func (e *checkSup) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *checkSup) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e checkSup) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(checkSups[*e-1], start) + enc.EncodeElement(checkSups[e-1], start) return nil } @@ -481,11 +481,11 @@ func (e *correctAction) UnmarshalXML(d *xml.Decoder, start xml.StartElement) err return e.FromString(value) } -func (e *correctAction) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e correctAction) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(correctActions[*e-1], start) + enc.EncodeElement(correctActions[e-1], start) return nil } @@ -547,11 +547,11 @@ func (e *balType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *balType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e balType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(balTypes[*e-1], start) + enc.EncodeElement(balTypes[e-1], start) return nil } @@ -617,11 +617,11 @@ func (e *inv401kSource) UnmarshalXML(d *xml.Decoder, start xml.StartElement) err return e.FromString(value) } -func (e *inv401kSource) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e inv401kSource) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(inv401kSources[*e-1], start) + enc.EncodeElement(inv401kSources[e-1], start) return nil } @@ -684,11 +684,11 @@ func (e *subAcctType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error return e.FromString(value) } -func (e *subAcctType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e subAcctType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(subAcctTypes[*e-1], start) + enc.EncodeElement(subAcctTypes[e-1], start) return nil } @@ -749,11 +749,11 @@ func (e *buyType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *buyType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e buyType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(buyTypes[*e-1], start) + enc.EncodeElement(buyTypes[e-1], start) return nil } @@ -815,11 +815,11 @@ func (e *optAction) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *optAction) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e optAction) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(optActions[*e-1], start) + enc.EncodeElement(optActions[e-1], start) return nil } @@ -880,11 +880,11 @@ func (e *tferAction) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error return e.FromString(value) } -func (e *tferAction) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e tferAction) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(tferActions[*e-1], start) + enc.EncodeElement(tferActions[e-1], start) return nil } @@ -945,11 +945,11 @@ func (e *posType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *posType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e posType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(posTypes[*e-1], start) + enc.EncodeElement(posTypes[e-1], start) return nil } @@ -1010,11 +1010,11 @@ func (e *secured) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *secured) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e secured) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(secureds[*e-1], start) + enc.EncodeElement(secureds[e-1], start) return nil } @@ -1076,11 +1076,11 @@ func (e *duration) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *duration) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e duration) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(durations[*e-1], start) + enc.EncodeElement(durations[e-1], start) return nil } @@ -1142,11 +1142,11 @@ func (e *restriction) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error return e.FromString(value) } -func (e *restriction) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e restriction) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(restrictions[*e-1], start) + enc.EncodeElement(restrictions[e-1], start) return nil } @@ -1207,11 +1207,11 @@ func (e *unitType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *unitType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e unitType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(unitTypes[*e-1], start) + enc.EncodeElement(unitTypes[e-1], start) return nil } @@ -1272,11 +1272,11 @@ func (e *optBuyType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error return e.FromString(value) } -func (e *optBuyType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e optBuyType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(optBuyTypes[*e-1], start) + enc.EncodeElement(optBuyTypes[e-1], start) return nil } @@ -1337,11 +1337,11 @@ func (e *sellType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *sellType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e sellType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(sellTypes[*e-1], start) + enc.EncodeElement(sellTypes[e-1], start) return nil } @@ -1410,11 +1410,11 @@ func (e *loanPmtFreq) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error return e.FromString(value) } -func (e *loanPmtFreq) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e loanPmtFreq) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(loanPmtFreqs[*e-1], start) + enc.EncodeElement(loanPmtFreqs[e-1], start) return nil } @@ -1478,11 +1478,11 @@ func (e *incomeType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error return e.FromString(value) } -func (e *incomeType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e incomeType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(incomeTypes[*e-1], start) + enc.EncodeElement(incomeTypes[e-1], start) return nil } @@ -1544,11 +1544,11 @@ func (e *sellReason) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error return e.FromString(value) } -func (e *sellReason) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e sellReason) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(sellReasons[*e-1], start) + enc.EncodeElement(sellReasons[e-1], start) return nil } @@ -1609,11 +1609,11 @@ func (e *optSellType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error return e.FromString(value) } -func (e *optSellType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e optSellType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(optSellTypes[*e-1], start) + enc.EncodeElement(optSellTypes[e-1], start) return nil } @@ -1676,11 +1676,11 @@ func (e *relType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *relType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e relType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(relTypes[*e-1], start) + enc.EncodeElement(relTypes[e-1], start) return nil } @@ -1743,11 +1743,11 @@ func (e *charType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *charType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e charType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(charTypes[*e-1], start) + enc.EncodeElement(charTypes[e-1], start) return nil } @@ -1808,11 +1808,11 @@ func (e *syncMode) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *syncMode) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e syncMode) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(syncModes[*e-1], start) + enc.EncodeElement(syncModes[e-1], start) return nil } @@ -1873,11 +1873,11 @@ func (e *ofxSec) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *ofxSec) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e ofxSec) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(ofxSecs[*e-1], start) + enc.EncodeElement(ofxSecs[e-1], start) return nil } @@ -1938,11 +1938,11 @@ func (e *debtType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *debtType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e debtType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(debtTypes[*e-1], start) + enc.EncodeElement(debtTypes[e-1], start) return nil } @@ -2005,11 +2005,11 @@ func (e *debtClass) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *debtClass) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e debtClass) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(debtClasss[*e-1], start) + enc.EncodeElement(debtClasss[e-1], start) return nil } @@ -2073,11 +2073,11 @@ func (e *couponFreq) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error return e.FromString(value) } -func (e *couponFreq) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e couponFreq) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(couponFreqs[*e-1], start) + enc.EncodeElement(couponFreqs[e-1], start) return nil } @@ -2140,11 +2140,11 @@ func (e *callType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *callType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e callType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(callTypes[*e-1], start) + enc.EncodeElement(callTypes[e-1], start) return nil } @@ -2210,11 +2210,11 @@ func (e *assetClass) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error return e.FromString(value) } -func (e *assetClass) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e assetClass) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(assetClasss[*e-1], start) + enc.EncodeElement(assetClasss[e-1], start) return nil } @@ -2276,11 +2276,11 @@ func (e *mfType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *mfType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e mfType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(mfTypes[*e-1], start) + enc.EncodeElement(mfTypes[e-1], start) return nil } @@ -2341,11 +2341,11 @@ func (e *optType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *optType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e optType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(optTypes[*e-1], start) + enc.EncodeElement(optTypes[e-1], start) return nil } @@ -2408,11 +2408,11 @@ func (e *stockType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *stockType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e stockType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(stockTypes[*e-1], start) + enc.EncodeElement(stockTypes[e-1], start) return nil } @@ -2476,11 +2476,11 @@ func (e *holderType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error return e.FromString(value) } -func (e *holderType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e holderType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(holderTypes[*e-1], start) + enc.EncodeElement(holderTypes[e-1], start) return nil } @@ -2543,11 +2543,11 @@ func (e *acctClassification) UnmarshalXML(d *xml.Decoder, start xml.StartElement return e.FromString(value) } -func (e *acctClassification) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e acctClassification) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(acctClassifications[*e-1], start) + enc.EncodeElement(acctClassifications[e-1], start) return nil } @@ -2609,11 +2609,11 @@ func (e *svcStatus) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { return e.FromString(value) } -func (e *svcStatus) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e svcStatus) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(svcStatuss[*e-1], start) + enc.EncodeElement(svcStatuss[e-1], start) return nil } @@ -2683,11 +2683,11 @@ func (e *usProductType) UnmarshalXML(d *xml.Decoder, start xml.StartElement) err return e.FromString(value) } -func (e *usProductType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { +func (e usProductType) MarshalXML(enc *xml.Encoder, start xml.StartElement) error { if !e.Valid() { return nil } - enc.EncodeElement(usProductTypes[*e-1], start) + enc.EncodeElement(usProductTypes[e-1], start) return nil } diff --git a/constants_test.go b/constants_test.go index bde41c7..7c05e1f 100644 --- a/constants_test.go +++ b/constants_test.go @@ -56,6 +56,18 @@ func TestOfxVersion(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E ofxVersion + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct OfxVersion): %s\n", err) + } + if string(b) != "220" { + t.Fatalf("Expected '%s', got '%s'\n", "220", string(b)) + } } func TestAcctType(t *testing.T) { @@ -101,6 +113,18 @@ func TestAcctType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E acctType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct AcctType): %s\n", err) + } + if string(b) != "CD" { + t.Fatalf("Expected '%s', got '%s'\n", "CD", string(b)) + } } func TestTrnType(t *testing.T) { @@ -146,6 +170,18 @@ func TestTrnType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E trnType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct TrnType): %s\n", err) + } + if string(b) != "OTHER" { + t.Fatalf("Expected '%s', got '%s'\n", "OTHER", string(b)) + } } func TestImageType(t *testing.T) { @@ -191,6 +227,18 @@ func TestImageType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E imageType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct ImageType): %s\n", err) + } + if string(b) != "TAX" { + t.Fatalf("Expected '%s', got '%s'\n", "TAX", string(b)) + } } func TestImageRefType(t *testing.T) { @@ -236,6 +284,18 @@ func TestImageRefType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E imageRefType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct ImageRefType): %s\n", err) + } + if string(b) != "FORMURL" { + t.Fatalf("Expected '%s', got '%s'\n", "FORMURL", string(b)) + } } func TestCheckSup(t *testing.T) { @@ -281,6 +341,18 @@ func TestCheckSup(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E checkSup + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct CheckSup): %s\n", err) + } + if string(b) != "FRONTANDBACK" { + t.Fatalf("Expected '%s', got '%s'\n", "FRONTANDBACK", string(b)) + } } func TestCorrectAction(t *testing.T) { @@ -326,6 +398,18 @@ func TestCorrectAction(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E correctAction + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct CorrectAction): %s\n", err) + } + if string(b) != "REPLACE" { + t.Fatalf("Expected '%s', got '%s'\n", "REPLACE", string(b)) + } } func TestBalType(t *testing.T) { @@ -371,6 +455,18 @@ func TestBalType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E balType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct BalType): %s\n", err) + } + if string(b) != "NUMBER" { + t.Fatalf("Expected '%s', got '%s'\n", "NUMBER", string(b)) + } } func TestInv401kSource(t *testing.T) { @@ -416,6 +512,18 @@ func TestInv401kSource(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E inv401kSource + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct Inv401kSource): %s\n", err) + } + if string(b) != "OTHERNONVEST" { + t.Fatalf("Expected '%s', got '%s'\n", "OTHERNONVEST", string(b)) + } } func TestSubAcctType(t *testing.T) { @@ -461,6 +569,18 @@ func TestSubAcctType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E subAcctType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct SubAcctType): %s\n", err) + } + if string(b) != "OTHER" { + t.Fatalf("Expected '%s', got '%s'\n", "OTHER", string(b)) + } } func TestBuyType(t *testing.T) { @@ -506,6 +626,18 @@ func TestBuyType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E buyType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct BuyType): %s\n", err) + } + if string(b) != "BUYTOCOVER" { + t.Fatalf("Expected '%s', got '%s'\n", "BUYTOCOVER", string(b)) + } } func TestOptAction(t *testing.T) { @@ -551,6 +683,18 @@ func TestOptAction(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E optAction + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct OptAction): %s\n", err) + } + if string(b) != "EXPIRE" { + t.Fatalf("Expected '%s', got '%s'\n", "EXPIRE", string(b)) + } } func TestTferAction(t *testing.T) { @@ -596,6 +740,18 @@ func TestTferAction(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E tferAction + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct TferAction): %s\n", err) + } + if string(b) != "OUT" { + t.Fatalf("Expected '%s', got '%s'\n", "OUT", string(b)) + } } func TestPosType(t *testing.T) { @@ -641,6 +797,18 @@ func TestPosType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E posType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct PosType): %s\n", err) + } + if string(b) != "SHORT" { + t.Fatalf("Expected '%s', got '%s'\n", "SHORT", string(b)) + } } func TestSecured(t *testing.T) { @@ -686,6 +854,18 @@ func TestSecured(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E secured + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct Secured): %s\n", err) + } + if string(b) != "COVERED" { + t.Fatalf("Expected '%s', got '%s'\n", "COVERED", string(b)) + } } func TestDuration(t *testing.T) { @@ -731,6 +911,18 @@ func TestDuration(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E duration + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct Duration): %s\n", err) + } + if string(b) != "IMMEDIATE" { + t.Fatalf("Expected '%s', got '%s'\n", "IMMEDIATE", string(b)) + } } func TestRestriction(t *testing.T) { @@ -776,6 +968,18 @@ func TestRestriction(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E restriction + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct Restriction): %s\n", err) + } + if string(b) != "NONE" { + t.Fatalf("Expected '%s', got '%s'\n", "NONE", string(b)) + } } func TestUnitType(t *testing.T) { @@ -821,6 +1025,18 @@ func TestUnitType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E unitType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct UnitType): %s\n", err) + } + if string(b) != "CURRENCY" { + t.Fatalf("Expected '%s', got '%s'\n", "CURRENCY", string(b)) + } } func TestOptBuyType(t *testing.T) { @@ -866,6 +1082,18 @@ func TestOptBuyType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E optBuyType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct OptBuyType): %s\n", err) + } + if string(b) != "BUYTOCLOSE" { + t.Fatalf("Expected '%s', got '%s'\n", "BUYTOCLOSE", string(b)) + } } func TestSellType(t *testing.T) { @@ -911,6 +1139,18 @@ func TestSellType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E sellType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct SellType): %s\n", err) + } + if string(b) != "SELLSHORT" { + t.Fatalf("Expected '%s', got '%s'\n", "SELLSHORT", string(b)) + } } func TestLoanPmtFreq(t *testing.T) { @@ -956,6 +1196,18 @@ func TestLoanPmtFreq(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E loanPmtFreq + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct LoanPmtFreq): %s\n", err) + } + if string(b) != "OTHER" { + t.Fatalf("Expected '%s', got '%s'\n", "OTHER", string(b)) + } } func TestIncomeType(t *testing.T) { @@ -1001,6 +1253,18 @@ func TestIncomeType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E incomeType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct IncomeType): %s\n", err) + } + if string(b) != "MISC" { + t.Fatalf("Expected '%s', got '%s'\n", "MISC", string(b)) + } } func TestSellReason(t *testing.T) { @@ -1046,6 +1310,18 @@ func TestSellReason(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E sellReason + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct SellReason): %s\n", err) + } + if string(b) != "MATURITY" { + t.Fatalf("Expected '%s', got '%s'\n", "MATURITY", string(b)) + } } func TestOptSellType(t *testing.T) { @@ -1091,6 +1367,18 @@ func TestOptSellType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E optSellType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct OptSellType): %s\n", err) + } + if string(b) != "SELLTOOPEN" { + t.Fatalf("Expected '%s', got '%s'\n", "SELLTOOPEN", string(b)) + } } func TestRelType(t *testing.T) { @@ -1136,6 +1424,18 @@ func TestRelType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E relType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct RelType): %s\n", err) + } + if string(b) != "OTHER" { + t.Fatalf("Expected '%s', got '%s'\n", "OTHER", string(b)) + } } func TestCharType(t *testing.T) { @@ -1181,6 +1481,18 @@ func TestCharType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E charType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct CharType): %s\n", err) + } + if string(b) != "ALPHAANDNUMERIC" { + t.Fatalf("Expected '%s', got '%s'\n", "ALPHAANDNUMERIC", string(b)) + } } func TestSyncMode(t *testing.T) { @@ -1226,6 +1538,18 @@ func TestSyncMode(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E syncMode + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct SyncMode): %s\n", err) + } + if string(b) != "LITE" { + t.Fatalf("Expected '%s', got '%s'\n", "LITE", string(b)) + } } func TestOfxSec(t *testing.T) { @@ -1271,6 +1595,18 @@ func TestOfxSec(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E ofxSec + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct OfxSec): %s\n", err) + } + if string(b) != "TYPE 1" { + t.Fatalf("Expected '%s', got '%s'\n", "TYPE 1", string(b)) + } } func TestDebtType(t *testing.T) { @@ -1316,6 +1652,18 @@ func TestDebtType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E debtType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct DebtType): %s\n", err) + } + if string(b) != "ZERO" { + t.Fatalf("Expected '%s', got '%s'\n", "ZERO", string(b)) + } } func TestDebtClass(t *testing.T) { @@ -1361,6 +1709,18 @@ func TestDebtClass(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E debtClass + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct DebtClass): %s\n", err) + } + if string(b) != "OTHER" { + t.Fatalf("Expected '%s', got '%s'\n", "OTHER", string(b)) + } } func TestCouponFreq(t *testing.T) { @@ -1406,6 +1766,18 @@ func TestCouponFreq(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E couponFreq + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct CouponFreq): %s\n", err) + } + if string(b) != "OTHER" { + t.Fatalf("Expected '%s', got '%s'\n", "OTHER", string(b)) + } } func TestCallType(t *testing.T) { @@ -1451,6 +1823,18 @@ func TestCallType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E callType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct CallType): %s\n", err) + } + if string(b) != "MATURITY" { + t.Fatalf("Expected '%s', got '%s'\n", "MATURITY", string(b)) + } } func TestAssetClass(t *testing.T) { @@ -1496,6 +1880,18 @@ func TestAssetClass(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E assetClass + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct AssetClass): %s\n", err) + } + if string(b) != "OTHER" { + t.Fatalf("Expected '%s', got '%s'\n", "OTHER", string(b)) + } } func TestMfType(t *testing.T) { @@ -1541,6 +1937,18 @@ func TestMfType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E mfType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct MfType): %s\n", err) + } + if string(b) != "OTHER" { + t.Fatalf("Expected '%s', got '%s'\n", "OTHER", string(b)) + } } func TestOptType(t *testing.T) { @@ -1586,6 +1994,18 @@ func TestOptType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E optType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct OptType): %s\n", err) + } + if string(b) != "CALL" { + t.Fatalf("Expected '%s', got '%s'\n", "CALL", string(b)) + } } func TestStockType(t *testing.T) { @@ -1631,6 +2051,18 @@ func TestStockType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E stockType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct StockType): %s\n", err) + } + if string(b) != "OTHER" { + t.Fatalf("Expected '%s', got '%s'\n", "OTHER", string(b)) + } } func TestHolderType(t *testing.T) { @@ -1676,6 +2108,18 @@ func TestHolderType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E holderType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct HolderType): %s\n", err) + } + if string(b) != "OTHER" { + t.Fatalf("Expected '%s', got '%s'\n", "OTHER", string(b)) + } } func TestAcctClassification(t *testing.T) { @@ -1721,6 +2165,18 @@ func TestAcctClassification(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E acctClassification + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct AcctClassification): %s\n", err) + } + if string(b) != "OTHER" { + t.Fatalf("Expected '%s', got '%s'\n", "OTHER", string(b)) + } } func TestSvcStatus(t *testing.T) { @@ -1766,6 +2222,18 @@ func TestSvcStatus(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E svcStatus + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct SvcStatus): %s\n", err) + } + if string(b) != "ACTIVE" { + t.Fatalf("Expected '%s', got '%s'\n", "ACTIVE", string(b)) + } } func TestUsProductType(t *testing.T) { @@ -1811,4 +2279,16 @@ func TestUsProductType(t *testing.T) { if err == nil { t.Fatalf("Expected error unmarshalling garbage value\n") } + + type SC struct { + E usProductType + } + sc := SC{E: e} + b, err = xml.Marshal(sc) + if err != nil { + t.Fatalf("Unexpected error on xml.Marshal(struct UsProductType): %s\n", err) + } + if string(b) != "UGMA" { + t.Fatalf("Expected '%s', got '%s'\n", "UGMA", string(b)) + } } diff --git a/generate_constants.py b/generate_constants.py index 704d31b..b1e09da 100755 --- a/generate_constants.py +++ b/generate_constants.py @@ -116,11 +116,11 @@ func (e *{enumLower}) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error return e.FromString(value) }} -func (e *{enumLower}) MarshalXML(enc *xml.Encoder, start xml.StartElement) error {{ +func (e {enumLower}) MarshalXML(enc *xml.Encoder, start xml.StartElement) error {{ if !e.Valid() {{ return nil }} - enc.EncodeElement({enumLower}s[*e-1], start) + enc.EncodeElement({enumLower}s[e-1], start) return nil }} @@ -225,6 +225,18 @@ func Test{enum}(t *testing.T) {{ if err == nil {{ t.Fatalf("Expected error unmarshalling garbage value\\n") }} + + type SC struct {{ + E {enumLower} + }} + sc := SC{{E: e}} + b, err = xml.Marshal(sc) + if err != nil {{ + t.Fatalf("Unexpected error on xml.Marshal(struct {enum}): %s\\n", err) + }} + if string(b) != "{lastValueUpper}" {{ + t.Fatalf("Expected '%s', got '%s'\\n", "{lastValueUpper}", string(b)) + }} }} """ @@ -232,8 +244,10 @@ with open("constants_test.go", 'w') as f: f.write(test_header) for enum in enums: + enumLower = enum[:1].lower() + enum[1:].replace(" ", "") firstValueUpper = enums[enum][0][0].upper() lastValueUpper = enums[enum][0][-1].upper() f.write(test_template.format(enum=enum, + enumLower=enumLower, firstValueUpper=firstValueUpper, lastValueUpper=lastValueUpper)) diff --git a/invstmt.go b/invstmt.go index 77282a1..a913f7f 100644 --- a/invstmt.go +++ b/invstmt.go @@ -911,12 +911,12 @@ func (p *PositionList) UnmarshalXML(d *xml.Decoder, start xml.StartElement) erro } // MarshalXML handles marshalling a PositionList to an XML string -func (p *PositionList) MarshalXML(e *xml.Encoder, start xml.StartElement) error { +func (p PositionList) MarshalXML(e *xml.Encoder, start xml.StartElement) error { invPosListElement := xml.StartElement{Name: xml.Name{Local: "INVPOSLIST"}} if err := e.EncodeToken(invPosListElement); err != nil { return err } - for _, position := range *p { + for _, position := range p { start := xml.StartElement{Name: xml.Name{Local: position.PositionType()}} switch pos := position.(type) { case DebtPosition: @@ -1216,12 +1216,12 @@ func (o *OOList) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { } // MarshalXML handles marshalling an OOList to an XML string -func (o *OOList) MarshalXML(e *xml.Encoder, start xml.StartElement) error { +func (o OOList) MarshalXML(e *xml.Encoder, start xml.StartElement) error { ooListElement := xml.StartElement{Name: xml.Name{Local: "INVOOLIST"}} if err := e.EncodeToken(ooListElement); err != nil { return err } - for _, openorder := range *o { + for _, openorder := range o { start := xml.StartElement{Name: xml.Name{Local: openorder.OrderType()}} switch oo := openorder.(type) { case OOBuyDebt: diff --git a/types.go b/types.go index 3004091..dda6a3f 100644 --- a/types.go +++ b/types.go @@ -76,7 +76,7 @@ func (a Amount) String() string { } // MarshalXML marshals an Amount to SGML/XML -func (a *Amount) MarshalXML(e *xml.Encoder, start xml.StartElement) error { +func (a Amount) MarshalXML(e *xml.Encoder, start xml.StartElement) error { return e.EncodeElement(a.String(), start) } @@ -188,7 +188,7 @@ func (od Date) String() string { } // MarshalXML marshals a Date to XML -func (od *Date) MarshalXML(e *xml.Encoder, start xml.StartElement) error { +func (od Date) MarshalXML(e *xml.Encoder, start xml.StartElement) error { return e.EncodeElement(od.String(), start) } @@ -260,8 +260,8 @@ func (ob *Boolean) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { } // MarshalXML marshals a Boolean to XML -func (ob *Boolean) MarshalXML(e *xml.Encoder, start xml.StartElement) error { - if *ob { +func (ob Boolean) MarshalXML(e *xml.Encoder, start xml.StartElement) error { + if ob { return e.EncodeElement("Y", start) } return e.EncodeElement("N", start) @@ -358,7 +358,7 @@ func (c *CurrSymbol) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error } // MarshalXML marshals a CurrSymbol to SGML/XML -func (c *CurrSymbol) MarshalXML(e *xml.Encoder, start xml.StartElement) error { +func (c CurrSymbol) MarshalXML(e *xml.Encoder, start xml.StartElement) error { return e.EncodeElement(c.String(), start) } diff --git a/types_test.go b/types_test.go index 2edbbfc..be338bb 100644 --- a/types_test.go +++ b/types_test.go @@ -91,6 +91,13 @@ func TestMarshalAmount(t *testing.T) { marshalHelper(t, "-768276587425", &a) a.SetFrac64(1, 12) marshalHelper(t, "0.0833333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333", &a) + + type AmountStruct struct { + A Amount + } + var as AmountStruct + as.A.SetFrac64(1, 8) + marshalHelper(t, "0.125", as) } func TestUnmarshalAmount(t *testing.T) { @@ -185,6 +192,13 @@ func TestMarshalDate(t *testing.T) { // Time zone without textual description d = NewDate(2017, 3, 14, 15, 9, 26, 53*1000*1000, GMTNodesc) marshalHelper(t, "20170314150926.053[0]", d) + + type DateStruct struct { + D Date + } + d = NewDateGMT(2017, 3, 14, 15, 9, 26, 53*1000*1000) + ds := DateStruct{D: *d} + marshalHelper(t, "20170314150926.053[0:GMT]", ds) } func TestUnmarshalDate(t *testing.T) { @@ -328,6 +342,12 @@ func TestMarshalBoolean(t *testing.T) { marshalHelper(t, "Y", &b) b = false marshalHelper(t, "N", &b) + + type BooleanStruct struct { + B Boolean + } + bs := BooleanStruct{B: true} + marshalHelper(t, "Y", bs) } func TestUnmarshalBoolean(t *testing.T) { @@ -412,6 +432,12 @@ func TestRandomUID(t *testing.T) { func TestMarshalCurrSymbol(t *testing.T) { c, _ := NewCurrSymbol("USD") marshalHelper(t, "USD", &c) + + type CurrSymbolStruct struct { + CS CurrSymbol + } + css := CurrSymbolStruct{CS: *c} + marshalHelper(t, "USD", css) } func TestUnmarshalCurrSymbol(t *testing.T) {