cmd/root.go (82 lines of code) (raw):
package cmd
import (
"fmt"
"os"
"runtime/debug"
"github.com/korosuke613/tempura/lib"
"github.com/spf13/cobra"
)
var (
version string
inputFilePath string
templateFilePath string
outputFilePath string
inputString string
templateString string
)
// Execute runs root command
func Execute() {
if err := newRootCmd().Execute(); err != nil {
// Not print an error because cobra.Command prints it.
os.Exit(1)
}
}
func newRootCmd() *cobra.Command {
var showVersion bool
cmd := &cobra.Command{
Use: "tempura",
Short: "tempura is a Tool that fills in templates.",
Long: `A Fast and Flexible Template Fill Tool built with love by korosuke613 in Go.`,
RunE: func(_ *cobra.Command, args []string) error {
if showVersion {
printVersion()
return nil
}
t := lib.Tempura{Template: templateString, TemplateFilePath: templateFilePath}
if inputString != "" {
if err := t.SetInputFromString(inputString); err != nil {
return err
}
} else {
if err := t.SetInputFromJSON(inputFilePath); err != nil {
return err
}
}
output, err := t.Fill()
if err != nil {
return err
}
if outputFilePath != "" {
file, err := os.Create(outputFilePath)
if err != nil {
return err
}
defer file.Close()
_, err = file.WriteString(output)
if err != nil {
return err
}
} else {
fmt.Println(output)
}
return nil
},
}
cmd.PersistentFlags().BoolVarP(&showVersion, "version", "v", false, "show version")
cmd.PersistentFlags().StringVarP(&inputFilePath, "input-filepath", "i", "input.json", "input file name")
cmd.PersistentFlags().StringVarP(&templateFilePath, "template-filepath", "t", "template.tmpl", "template file name")
cmd.PersistentFlags().StringVarP(&outputFilePath, "output", "o", "", "output file name")
cmd.PersistentFlags().StringVar(&inputString, "input-string", "", "input string")
cmd.PersistentFlags().StringVar(&templateString, "template-string", "", "template string")
return cmd
}
func printVersion() {
trueVersion := version
if version == "" {
info, ok := debug.ReadBuildInfo()
if ok {
trueVersion = info.Main.Version
} else {
trueVersion = "(devel)"
}
}
fmt.Printf("tempura version: %s\n", trueVersion)
}