aboutsummaryrefslogtreecommitdiff
path: root/PaddedWriter.go
blob: f3430b5bdab02a8bfd06da2e93e6ffe5f7215cff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package kagus

import (
	"io"
)

// PaddedWriter is a writer for data that needs to be padded / aligned.
type PaddedWriter struct {
	cw      *CountWriter
	padding int
}

func NewPaddedWriter(w io.Writer, padding int) *PaddedWriter {
	return &PaddedWriter{NewCountWriter(w), padding}
}

func (pw *PaddedWriter) Write(p []byte) (int, error) {
	return pw.cw.Write(p)
}

// Pad needs to be called if the padding should be inserted. Data is padded with zero-bytes.
func (pw *PaddedWriter) Pad() error {
	mod := int(pw.cw.N % int64(pw.padding))
	if mod == 0 {
		return nil
	}

	paddingLen := pw.padding - mod
	padding := make([]byte, paddingLen)
	_, err := pw.cw.Write(padding)
	return err
}