package comdef

import (
	
	

	
)

// DataFormatter interface
type DataFormatter interface {
	Format() string
	FormatTo(w io.Writer)
}

// BaseFormatter struct
//
// Usage:
//
//	 type YourFormatter struct {
//			comdef.BaseFormatter
//	 }
//	 // implement the DataFormatter interface...
type BaseFormatter struct {
	ow ByteStringWriter
	// Out formatted to the writer
	Out io.Writer
	// Src data(array, map, struct) for format
	Src any
	// MaxDepth limit depth for array, map data TODO
	MaxDepth int
	// Prefix string for each element
	Prefix string
	// Indent string for format each element
	Indent string
	// ClosePrefix string for last "]", "}"
	ClosePrefix string
}

// Reset after format
func ( *BaseFormatter) () {
	.Out = nil
	.Src = nil
}

// SetOutput writer
func ( *BaseFormatter) ( io.Writer) {
	.Out = 
}

// BsWriter warp the Out, build a ByteStringWriter
func ( *BaseFormatter) () ByteStringWriter {
	if .ow == nil {
		if .Out == nil {
			.ow = new(bytes.Buffer)
		} else if ,  := .Out.(ByteStringWriter);  {
			.ow = 
		} else {
			.ow = stdio.NewWriteWrapper(.Out)
		}
	}
	return .ow
}