fuzzyworld

template / files / internal / core / file.go

file.go

1.9 KB · history · blame

1package core
2
3import (
4 "bufio"
5 "fmt"
6 "os"
7
8 log "github.com/sirupsen/logrus"
9)
10
11func createFile(
12 prePatternData PrePatternData,
13 fileTemplate ParameterizedText,
14 fullPath string,
15 pipeInputScanner *bufio.Scanner) error {
16
17 useTemplate := fileTemplate != ""
18 useInputPipe := pipeInputScanner != nil
19
20 if useInputPipe {
21 log.WithFields(log.Fields{"fullPath": fullPath}).Debug("Creating file from input pipe content", fullPath)
22
23 file, err := monkey.OSCreate(fullPath)
24 if err != nil {
25 return fmt.Errorf("error creating file: %v", err)
26 }
27 defer func() { _ = file.Close() }()
28
29 writer := bufio.NewWriter(file)
30 for pipeInputScanner.Scan() {
31 line := pipeInputScanner.Text()
32 _, err := writer.WriteString(line + "\n")
33 if err != nil {
34 return fmt.Errorf("error writing file: %v", err)
35 }
36 }
37 err = writer.Flush()
38 if err != nil {
39 return fmt.Errorf("error flushing file: %v", err)
40 }
41 } else if useTemplate {
42 postPatternData := createPostPatternData(fullPath, prePatternData)
43 log.WithFields(log.Fields{"fullPath": fullPath}).Debug("Creating file from template string\n", fullPath)
44
45 templateString, err := parseAndExecTemplate(newTemplate(), fileTemplate, postPatternData)
46 if err != nil {
47 return fmt.Errorf("error creating templated file: %v", err)
48 }
49
50 err = monkey.OSWriteFile(fullPath, []byte(templateString), os.ModePerm)
51 if err != nil {
52 return fmt.Errorf("error writing file: %v", err)
53 }
54 } else {
55 log.WithFields(log.Fields{"fullPath": fullPath}).Debug("Creating empty file", fullPath)
56 err := monkey.OSWriteFile(fullPath, []byte{}, os.ModePerm)
57 if err != nil {
58 return fmt.Errorf("error writing file: %v", err)
59 }
60 }
61 return nil
62}
63
64func readFile(
65 filePath string,
66) (string, error) {
67 file, err := os.ReadFile(filePath)
68 if err != nil {
69 return "", fmt.Errorf("error reading file %s: %w", filePath, err)
70 }
71 return string(file), nil
72}
73