diff --git a/common.go b/common.go index 786fe2c..62cf58c 100644 --- a/common.go +++ b/common.go @@ -3,10 +3,36 @@ package ofxgo //go:generate ./generate_constants.py import ( + "bytes" "errors" + "fmt" "github.com/aclindsa/xml" ) +func writeHeader(b *bytes.Buffer, v ofxVersion) error { + // Write the header appropriate to our version + switch v { + case OfxVersion102, OfxVersion103, OfxVersion151, OfxVersion160: + b.WriteString(`OFXHEADER:100 +DATA:OFXSGML +VERSION:` + v.String() + ` +SECURITY:NONE +ENCODING:USASCII +CHARSET:1252 +COMPRESSION:NONE +OLDFILEUID:NONE +NEWFILEUID:NONE + +`) + case OfxVersion200, OfxVersion201, OfxVersion202, OfxVersion203, OfxVersion210, OfxVersion211, OfxVersion220: + b.WriteString(`` + "\n") + b.WriteString(`` + "\n") + default: + return fmt.Errorf("%d is not a valid OFX version string", v) + } + return nil +} + // Message represents an OFX message in a message set. it is used to ease // marshalling and unmarshalling. type Message interface { diff --git a/request.go b/request.go index dc63f19..7b6171d 100644 --- a/request.go +++ b/request.go @@ -3,7 +3,6 @@ package ofxgo import ( "bytes" "errors" - "fmt" "github.com/aclindsa/xml" "time" ) @@ -35,7 +34,7 @@ type Request struct { indent bool // Whether to indent the marshaled XML } -func marshalMessageSet(e *xml.Encoder, requests []Message, set messageType, version ofxVersion) error { +func encodeMessageSet(e *xml.Encoder, requests []Message, set messageType, version ofxVersion) error { if len(requests) > 0 { messageSetElement := xml.StartElement{Name: xml.Name{Local: set.String()}} if err := e.EncodeToken(messageSetElement); err != nil { @@ -80,25 +79,7 @@ func (oq *Request) Marshal() (*bytes.Buffer, error) { var b bytes.Buffer // Write the header appropriate to our version - switch oq.Version { - case OfxVersion102, OfxVersion103, OfxVersion151, OfxVersion160: - b.WriteString(`OFXHEADER:100 -DATA:OFXSGML -VERSION:` + oq.Version.String() + ` -SECURITY:NONE -ENCODING:USASCII -CHARSET:1252 -COMPRESSION:NONE -OLDFILEUID:NONE -NEWFILEUID:NONE - -`) - case OfxVersion200, OfxVersion201, OfxVersion202, OfxVersion203, OfxVersion210, OfxVersion211, OfxVersion220: - b.WriteString(`` + "\n") - b.WriteString(`` + "\n") - default: - return nil, fmt.Errorf("%d is not a valid OFX version string", oq.Version) - } + writeHeader(&b, oq.Version) encoder := xml.NewEncoder(&b) if oq.indent { @@ -145,7 +126,7 @@ NEWFILEUID:NONE {oq.Image, ImageRq}, } for _, set := range messageSets { - if err := marshalMessageSet(encoder, set.Messages, set.Type, oq.Version); err != nil { + if err := encodeMessageSet(encoder, set.Messages, set.Type, oq.Version); err != nil { return nil, err } }