package msgio

import (
	
	
	
)

// LimitedReader wraps an io.Reader with a msgio framed reader. The LimitedReader
// will return a reader which will io.EOF when the msg length is done.
func ( io.Reader) (io.Reader, error) {
	,  := ReadLen(, nil)
	return io.LimitReader(, int64()), 
}

// LimitedWriter wraps an io.Writer with a msgio framed writer. It is the inverse
// of LimitedReader: it will buffer all writes until "Flush" is called. When Flush
// is called, it will write the size of the buffer first, flush the buffer, reset
// the buffer, and begin accept more incoming writes.
func ( io.Writer) *LimitedWriter {
	return &LimitedWriter{W: }
}

type LimitedWriter struct {
	W io.Writer
	B bytes.Buffer
	M sync.Mutex
}

func ( *LimitedWriter) ( []byte) ( int,  error) {
	.M.Lock()
	,  = .B.Write()
	.M.Unlock()
	return , 
}

func ( *LimitedWriter) () error {
	.M.Lock()
	defer .M.Unlock()
	if  := WriteLen(.W, .B.Len());  != nil {
		return 
	}
	,  := .B.WriteTo(.W)
	return 
}