diff --git a/main.go b/main.go index 14bf6e0..3907899 100644 --- a/main.go +++ b/main.go @@ -5,31 +5,24 @@ import ( "os" "strings" "text/template" + "bufio" + "io" ) -const envDelimiter string = "=" -const paramsListDelimiter string = "," -const paramsListSuffix string = "LIST" +const defaultParamPrefix = "GEV" +const envDelimiter = "=" +const paramsListDelimiter = "," +const paramsListSuffix = "LIST" +const templateSuffix = ".tpl" func getArgs() (string, string, string) { inFileName := flag.String("i", "", "Input file name") outFileName := flag.String("o", "", "Output file name") - prefix := flag.String("p", "", "Prefix for environment variables") + prefix := flag.String("p", defaultParamPrefix, "Prefix for environment variables") flag.Parse() - if len(*inFileName) == 0 { - os.Stderr.WriteString("Input file name not present\n") - os.Exit(1) - } - - if len(*outFileName) == 0 { - os.Stderr.WriteString("Output file name not present\n") - os.Exit(1) - } - - if len(*prefix) == 0 { - os.Stderr.WriteString("Prefix not present\n") - os.Exit(1) + if *outFileName == "" && strings.HasSuffix(*inFileName, templateSuffix) { + *outFileName = strings.TrimSuffix(*inFileName, templateSuffix) } return *inFileName, *outFileName, *prefix @@ -43,9 +36,11 @@ func getParams(prefix string, suffix string, delimiter string) map[string]interf for _, e := range os.Environ() { pair := strings.Split(e, envDelimiter) if strings.HasPrefix(pair[0], prefix) { - var paramName string - var paramValue string - var paramList []string + var ( + paramName string + paramValue string + paramList []string + ) if strings.HasSuffix(pair[0], suffix) { suffixShift := len(pair[0]) - suffixLen - 1 paramName = pair[0][prefixShift:suffixShift] @@ -65,20 +60,45 @@ func getParams(prefix string, suffix string, delimiter string) map[string]interf } func main() { - var inFileName string - var outFileName string - var prefix string + var ( + inFileName string + outFileName string + prefix string + out *os.File + tmpl *template.Template + err error + ) inFileName, outFileName, prefix = getArgs() - tmpl, err := template.ParseFiles(inFileName) - if err != nil { - panic(err) + if inFileName != "" { + tmpl, err = template.ParseFiles(inFileName) + if err != nil { + panic(err) + } + } else { + var ( + content []rune + b rune + ) + reader := bufio.NewReader(os.Stdin) + for { + b, _, err = reader.ReadRune() + if err != nil && err == io.EOF { + break + } + content = append(content, b) + } + tmpl, _ = template.New("piped").Parse(string(content)) } - out, err := os.Create(outFileName) - if err != nil { - panic(err) + if outFileName != "" { + out, err = os.Create(outFileName) + if err != nil { + panic(err) + } + } else { + out = os.Stdout } tplParams := getParams(prefix, paramsListSuffix, paramsListDelimiter)