package vals

import (
	
	
)

// ListReprBuilder helps to build Repr of list-like Values.
type ListReprBuilder struct {
	indent int
	buf    bytes.Buffer
}

// NewListReprBuilder makes a new ListReprBuilder.
func ( int) *ListReprBuilder {
	return &ListReprBuilder{indent: }
}

// WriteElem writes a new element.
func ( *ListReprBuilder) ( string) {
	if .buf.Len() == 0 {
		.buf.WriteByte('[')
	}
	if .indent >= 0 {
		// Pretty-printing: Add a newline and indent+1 spaces.
		.buf.WriteString("\n" + strings.Repeat(" ", .indent+1))
	} else if .buf.Len() > 1 {
		.buf.WriteByte(' ')
	}
	.buf.WriteString()
}

// String returns the representation that has been built. After it is called,
// the ListReprBuilder may no longer be used.
func ( *ListReprBuilder) () string {
	if .buf.Len() == 0 {
		return "[]"
	}
	if .indent >= 0 {
		.buf.WriteString("\n" + strings.Repeat(" ", .indent))
	}
	.buf.WriteByte(']')
	return .buf.String()
}

// MapReprBuilder helps building the Repr of a Map. It is also useful for
// implementing other Map-like values. The zero value of a MapReprBuilder is
// ready to use.
type MapReprBuilder struct {
	inner ListReprBuilder
}

// NewMapReprBuilder makes a new MapReprBuilder.
func ( int) *MapReprBuilder {
	return &MapReprBuilder{ListReprBuilder{indent: }}
}

// WritePair writes a new pair.
func ( *MapReprBuilder) ( string,  int,  string) {
	if  > 0 {
		.inner.WriteElem("&" +  + "=\t" + )
	} else {
		.inner.WriteElem("&" +  + "=" + )
	}
}

// String returns the representation that has been built. After it is called,
// the MapReprBuilder should no longer be used.
func ( *MapReprBuilder) () string {
	 := .inner.String()
	if  == "[]" {
		return "[&]"
	}
	return 
}