package ioutils

import (
	"io"
	"time"
)

type RetryWriter struct {
	io.Writer
}

func (w *RetryWriter) Write(p []byte) (int, error) {
	ntotal := 0
	var err error
	for len(p) > 0 {
		n, err := w.Writer.Write(p)
		p = p[n:]
		ntotal += n
		if err != nil && err != io.ErrShortWrite {
			break
		}
		if len(p) > 0 {
			time.Sleep(10 * time.Millisecond)
		}
	}
	return ntotal, err
}