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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
package hashio // import "pault.ag/go/debian/hashio"
import (
"io"
)
func NewHasherWriter(hash string, target io.Writer) (io.Writer, *Hasher, error) {
hw, err := NewHasher(hash)
if err != nil {
return nil, nil, err
}
endWriter := io.MultiWriter(target, hw)
return endWriter, hw, nil
}
func NewHasherWriters(hashes []string, target io.Writer) (io.Writer, []*Hasher, error) {
hashers := []*Hasher{}
writers := []io.Writer{}
for _, hash := range hashes {
hw, err := NewHasher(hash)
if err != nil {
return nil, nil, err
}
hashers = append(hashers, hw)
writers = append(writers, hw)
}
endWriter := io.MultiWriter(append(writers, target)...)
return endWriter, hashers, nil
}
func NewHasherReader(hash string, target io.Reader) (io.Reader, *Hasher, error) {
hw, err := NewHasher(hash)
if err != nil {
return nil, nil, err
}
endReader := io.TeeReader(target, hw)
return endReader, hw, nil
}
func NewHasherReaders(hashes []string, target io.Reader) (io.Reader, []*Hasher, error) {
hashers := []*Hasher{}
writers := []io.Writer{}
for _, hash := range hashes {
hw, err := NewHasher(hash)
if err != nil {
return nil, nil, err
}
hashers = append(hashers, hw)
writers = append(writers, hw)
}
endReader := io.TeeReader(target, io.MultiWriter(writers...))
return endReader, hashers, nil
}
|