File: construct.go

package info (click to toggle)
golang-pault-go-debian 0.16.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 412 kB
  • sloc: makefile: 2
file content (56 lines) | stat: -rw-r--r-- 1,334 bytes parent folder | download
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
}