package pgx

import (
	"bytes"
	"encoding/binary"
)

type messageWriter struct {
	buf *bytes.Buffer
	err error
}

func newMessageWriter(buf *bytes.Buffer) *messageWriter {
	return &messageWriter{buf: buf}
}

func (w *messageWriter) writeCString(s string) {
	if w.err != nil {
		return
	}
	if _, w.err = w.buf.WriteString(s); w.err != nil {
		return
	}
	w.err = w.buf.WriteByte(0)
}

func (w *messageWriter) writeString(s string) {
	if w.err != nil {
		return
	}
	if _, w.err = w.buf.WriteString(s); w.err != nil {
		return
	}
}

func (w *messageWriter) writeByte(b byte) {
	if w.err != nil {
		return
	}

	w.err = w.buf.WriteByte(b)
}

func (w *messageWriter) write(data interface{}) {
	if w.err != nil {
		return
	}

	w.err = binary.Write(w.buf, binary.BigEndian, data)
}