// Copyright 2019 The Xorm Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package builder

import (
	"io"
	"strings"
)

// Writer defines the interface
type Writer interface {
	io.Writer
	Append(...interface{})
}

var _ Writer = NewWriter()

// BytesWriter implments Writer and save SQL in bytes.Buffer
type BytesWriter struct {
	*strings.Builder
	args []interface{}
}

// NewWriter creates a new string writer
func NewWriter() *BytesWriter {
	w := &BytesWriter{
		Builder: &strings.Builder{},
	}
	return w
}

// Append appends args to Writer
func (w *BytesWriter) Append(args ...interface{}) {
	w.args = append(w.args, args...)
}

// Args returns args
func (w *BytesWriter) Args() []interface{} {
	return w.args
}