remote/buffer.go

Summary

Maintainability
A
0 mins
Test Coverage
package remote

import (
    "bytes"
    "io"
    "strings"
)

type Buffer interface {
    io.Reader
    io.WriterTo
    WriteXML(string)
    String() string
    Length() int64
}

func NewSIRIBuffer(envelopeType string) Buffer {
    switch envelopeType {
    case RAW_SIRI_ENVELOPE:
        return newRawBuffer()
    case SOAP_SIRI_ENVELOPE:
        return newSOAPBuffer()
    default:
        return newSOAPBuffer()
    }
}

type RawBuffer struct {
    b bytes.Buffer
}

func newRawBuffer() *RawBuffer {
    return &RawBuffer{}
}

func (rb *RawBuffer) WriteXML(xml string) {
    rb.b.WriteString("<?xml version='1.0' encoding='utf-8'?>\n")
    rb.b.WriteString("<Siri xmlns='http://www.siri.org.uk/siri' version='2.0'>\n")
    rb.b.WriteString(strings.TrimSuffix(xml, "\n"))
    rb.b.WriteString("\n</Siri>")
}

func (rb *RawBuffer) Read(p []byte) (n int, err error) {
    n, err = rb.b.Read(p)
    return
}

func (rb *RawBuffer) WriteTo(w io.Writer) (n int64, err error) {
    n, err = rb.b.WriteTo(w)
    return
}

func (rb *RawBuffer) String() string {
    return rb.b.String()
}

func (rb *RawBuffer) Length() int64 {
    return int64(rb.b.Len())
}

type SOAPBuffer struct {
    b bytes.Buffer
}

func newSOAPBuffer() *SOAPBuffer {
    return &SOAPBuffer{}
}

func (sb *SOAPBuffer) WriteXML(xml string) {
    sb.b.WriteString("<?xml version='1.0' encoding='utf-8'?>\n<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\">\n<S:Body>\n")
    sb.b.WriteString(strings.TrimSuffix(xml, "\n"))
    sb.b.WriteString("\n</S:Body>\n</S:Envelope>")
}

func (sb *SOAPBuffer) Read(p []byte) (n int, err error) {
    n, err = sb.b.Read(p)
    return
}

func (sb *SOAPBuffer) WriteTo(w io.Writer) (n int64, err error) {
    n, err = sb.b.WriteTo(w)
    return
}

func (sb *SOAPBuffer) String() string {
    return sb.b.String()
}

func (sb *SOAPBuffer) Length() int64 {
    return int64(sb.b.Len())
}