output.Saver.Close   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 4
nop 0
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
package output
2
3
import (
4
	"fmt"
5
	"io"
6
	"os"
7
8
	"github.com/pkg/errors"
9
	"github.com/stefanoj3/dirstalk/pkg/scan"
10
)
11
12
var (
13
	errNilWriteCloser = errors.New("Saver: writeCloser is nil")
14
)
15
16
func NewFileSaver(path string) (Saver, error) {
17
	file, err := os.Create(path)
18
	if err != nil {
19
		return Saver{}, errors.Wrapf(err, "failed to create file `%s` for output", path)
20
	}
21
22
	return Saver{writeCloser: file}, nil
23
}
24
25
type Saver struct {
26
	writeCloser io.WriteCloser
27
}
28
29
func (f Saver) Save(r scan.Result) error {
30
	if f.writeCloser == nil {
31
		return errNilWriteCloser
32
	}
33
34
	rawResult, err := convertResultToRawData(r)
35
	if err != nil {
36
		return errors.Wrap(err, "Saver: failed to convert result")
37
	}
38
39
	_, err = fmt.Fprintln(f.writeCloser, string(rawResult))
40
41
	return errors.Wrapf(err, "Saver: failed to write result: %s", rawResult)
42
}
43
44
func (f Saver) Close() error {
45
	if f.writeCloser == nil {
46
		return errNilWriteCloser
47
	}
48
49
	return f.writeCloser.Close()
50
}
51