github.com/wtfutil/wtf@v0.43.0/generator/textwidget.go (about)

     1  //go:build ignore
     2  
     3  // This package takes care of generates for empty widgets. Each generator is named after the
     4  // type of widget it generate, so textwidget.go will generate the skeleton for a new TextWidget
     5  // using the textwidget.tpl template.
     6  // The TextWidget generator needs one environment variable, called WTF_WIDGET_NAME, which will
     7  // be the name of the TextWidget it generates. If the variable hasn't been set, the generator
     8  // will use "NewTextWidget". On Linux and macOS the command can be run as
     9  // 'WTF_WIDGET_NAME=MyNewWidget go generate -run=text'.
    10  package main
    11  
    12  import (
    13  	"fmt"
    14  	"os"
    15  	"strings"
    16  	"text/template"
    17  )
    18  
    19  const (
    20  	defaultWidgetName = "NewTextWidget"
    21  	widgetMaker       = "app/widget_maker.go"
    22  )
    23  
    24  func main() {
    25  	widgetName, present := os.LookupEnv("WTF_WIDGET_NAME")
    26  	if !present {
    27  		widgetName = defaultWidgetName
    28  	}
    29  
    30  	data := struct {
    31  		Name string
    32  	}{
    33  		widgetName,
    34  	}
    35  
    36  	createModuleDirectory(data)
    37  
    38  	generateWidgetFile(data)
    39  	generateSettingsFile(data)
    40  	fmt.Println("Don't forget to register your module in file", widgetMaker)
    41  }
    42  
    43  /* -------------------- Unexported Functions -------------------- */
    44  
    45  func createModuleDirectory(data struct{ Name string }) {
    46  	err := os.MkdirAll(strings.ToLower(fmt.Sprintf("modules/%s", data.Name)), os.ModePerm)
    47  	if err != nil {
    48  		fmt.Println(err.Error())
    49  	}
    50  }
    51  
    52  func generateWidgetFile(data struct{ Name string }) {
    53  	tpl, _ := template.New("textwidget.tpl").Funcs(template.FuncMap{
    54  		"Lower": strings.ToLower,
    55  	}).ParseFiles("generator/textwidget.tpl")
    56  
    57  	out, err := os.Create(fmt.Sprintf("modules/%s/widget.go", strings.ToLower(data.Name)))
    58  	if err != nil {
    59  		fmt.Println(err.Error())
    60  	}
    61  	defer out.Close()
    62  
    63  	tpl.Execute(out, data)
    64  }
    65  
    66  func generateSettingsFile(data struct{ Name string }) {
    67  	tpl, _ := template.New("settings.tpl").Funcs(template.FuncMap{
    68  		"Lower": strings.ToLower,
    69  	}).ParseFiles("generator/settings.tpl")
    70  
    71  	out, err := os.Create(fmt.Sprintf("modules/%s/settings.go", strings.ToLower(data.Name)))
    72  	if err != nil {
    73  		fmt.Println(err.Error())
    74  	}
    75  	defer out.Close()
    76  
    77  	tpl.Execute(out, data)
    78  }