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 }