| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | 
							- package buf
 
- import "io"
 
- // BufferToBytesWriter is a Writer that writes alloc.Buffer into underlying writer.
 
- type BufferToBytesWriter struct {
 
- 	writer io.Writer
 
- }
 
- // Write implements Writer.Write(). Write() takes ownership of the given buffer.
 
- func (w *BufferToBytesWriter) Write(mb MultiBuffer) error {
 
- 	defer mb.Release()
 
- 	bs := mb.ToNetBuffers()
 
- 	_, err := bs.WriteTo(w.writer)
 
- 	return err
 
- }
 
- type writerAdapter struct {
 
- 	writer MultiBufferWriter
 
- }
 
- func (w *writerAdapter) Write(mb MultiBuffer) error {
 
- 	_, err := w.writer.WriteMultiBuffer(mb)
 
- 	return err
 
- }
 
- type mergingWriter struct {
 
- 	writer io.Writer
 
- 	buffer []byte
 
- }
 
- func (w *mergingWriter) Write(mb MultiBuffer) error {
 
- 	defer mb.Release()
 
- 	for !mb.IsEmpty() {
 
- 		nBytes, _ := mb.Read(w.buffer)
 
- 		if _, err := w.writer.Write(w.buffer[:nBytes]); err != nil {
 
- 			return err
 
- 		}
 
- 	}
 
- 	return nil
 
- }
 
- type bytesToBufferWriter struct {
 
- 	writer Writer
 
- }
 
- func (w *bytesToBufferWriter) Write(payload []byte) (int, error) {
 
- 	mb := NewMultiBuffer()
 
- 	for p := payload; len(p) > 0; {
 
- 		b := New()
 
- 		nBytes, _ := b.Write(p)
 
- 		p = p[nBytes:]
 
- 		mb.Append(b)
 
- 	}
 
- 	if err := w.writer.Write(mb); err != nil {
 
- 		return 0, err
 
- 	}
 
- 	return len(payload), nil
 
- }
 
- func (w *bytesToBufferWriter) WriteMulteBuffer(mb MultiBuffer) (int, error) {
 
- 	return mb.Len(), w.writer.Write(mb)
 
- }
 
- func (w *bytesToBufferWriter) ReadFrom(reader io.Reader) (int64, error) {
 
- 	mbReader := NewReader(reader)
 
- 	totalBytes := int64(0)
 
- 	eof := false
 
- 	for !eof {
 
- 		mb, err := mbReader.Read()
 
- 		if err == io.EOF {
 
- 			eof = true
 
- 		} else if err != nil {
 
- 			return totalBytes, err
 
- 		}
 
- 		totalBytes += int64(mb.Len())
 
- 		if err := w.writer.Write(mb); err != nil {
 
- 			return totalBytes, err
 
- 		}
 
- 	}
 
- 	return totalBytes, nil
 
- }
 
 
  |