forked from mbordner/kazaam
-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.go
84 lines (74 loc) · 2.08 KB
/
main.go
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// A simple command-line interface (CLI) for executing kazaam transforms on data from files or stdin.
package main
import (
"bufio"
"errors"
"flag"
"fmt"
"io/ioutil"
"log"
"os"
"github.com/semarcial/kazaam/v5"
)
var (
// command-line arguments
specFilename = flag.String("spec", "", "Kazaam Specification (required)")
inFilename = flag.String("in", "", "Input file (optional)")
outFilename = flag.String("out", "", "Output file (optional)")
verbose = flag.Bool("verbose", false, "Turn on verbose logging")
)
func loadKazaamTransform(specFilename string) (*kazaam.Kazaam, error) {
if specFilename == "" {
return nil, errors.New("Must specify a Kazaam specification file")
}
specFile, specFileError := ioutil.ReadFile(specFilename)
if specFileError != nil {
return nil, errors.New("Unable to read Kazaam specification file: " + specFileError.Error())
}
k, specError := kazaam.NewKazaam(string(specFile))
if specError != nil {
return nil, errors.New("Unable to load Kazaam specification file: " + specError.Error())
}
return k, nil
}
func getInput(inputFilename string, file *os.File) (string, error) {
var inData []byte
var readError error
if inputFilename == "" {
// read from stdin
reader := bufio.NewReader(file)
inData, readError = ioutil.ReadAll(reader)
} else {
// read from file
inData, readError = ioutil.ReadFile(inputFilename)
}
if readError != nil {
return "", readError
}
return string(inData), nil
}
func main() {
flag.Parse()
k, err := loadKazaamTransform(*specFilename)
if err != nil {
log.Fatal("Trouble loading specification", err)
}
in, err := getInput(*inFilename, os.Stdin)
if err != nil {
log.Fatal("Unable to open specified input")
}
out, transformError := k.TransformJSONStringToString(in)
if transformError != nil {
log.Fatal("Unable to transform message", transformError)
}
if *outFilename == "" {
// write to stdout
fmt.Print(out)
} else {
// write to file
writeError := ioutil.WriteFile(*outFilename, []byte(out), 0644)
if writeError != nil {
log.Fatal("Unable to write transformed output", writeError)
}
}
}