1package cmd 2 3import ( 4 "fmt" 5 "os" 6 "text/template" 7 8 "github.com/spf13/cobra/cobra/tpl" 9) 10 11// Project contains name, license and paths to projects. 12type Project struct { 13 // v2 14 PkgName string 15 Copyright string 16 AbsolutePath string 17 Legal License 18 Viper bool 19 AppName string 20} 21 22type Command struct { 23 CmdName string 24 CmdParent string 25 *Project 26} 27 28func (p *Project) Create() error { 29 // check if AbsolutePath exists 30 if _, err := os.Stat(p.AbsolutePath); os.IsNotExist(err) { 31 // create directory 32 if err := os.Mkdir(p.AbsolutePath, 0754); err != nil { 33 return err 34 } 35 } 36 37 // create main.go 38 mainFile, err := os.Create(fmt.Sprintf("%s/main.go", p.AbsolutePath)) 39 if err != nil { 40 return err 41 } 42 defer mainFile.Close() 43 44 mainTemplate := template.Must(template.New("main").Parse(string(tpl.MainTemplate()))) 45 err = mainTemplate.Execute(mainFile, p) 46 if err != nil { 47 return err 48 } 49 50 // create cmd/root.go 51 if _, err = os.Stat(fmt.Sprintf("%s/cmd", p.AbsolutePath)); os.IsNotExist(err) { 52 os.Mkdir(fmt.Sprintf("%s/cmd", p.AbsolutePath), 0751) 53 } 54 rootFile, err := os.Create(fmt.Sprintf("%s/cmd/root.go", p.AbsolutePath)) 55 if err != nil { 56 return err 57 } 58 defer rootFile.Close() 59 60 rootTemplate := template.Must(template.New("root").Parse(string(tpl.RootTemplate()))) 61 err = rootTemplate.Execute(rootFile, p) 62 if err != nil { 63 return err 64 } 65 66 // create license 67 return p.createLicenseFile() 68} 69 70func (p *Project) createLicenseFile() error { 71 data := map[string]interface{}{ 72 "copyright": copyrightLine(), 73 } 74 licenseFile, err := os.Create(fmt.Sprintf("%s/LICENSE", p.AbsolutePath)) 75 if err != nil { 76 return err 77 } 78 defer licenseFile.Close() 79 80 licenseTemplate := template.Must(template.New("license").Parse(p.Legal.Text)) 81 return licenseTemplate.Execute(licenseFile, data) 82} 83 84func (c *Command) Create() error { 85 cmdFile, err := os.Create(fmt.Sprintf("%s/cmd/%s.go", c.AbsolutePath, c.CmdName)) 86 if err != nil { 87 return err 88 } 89 defer cmdFile.Close() 90 91 commandTemplate := template.Must(template.New("sub").Parse(string(tpl.AddCommandTemplate()))) 92 err = commandTemplate.Execute(cmdFile, c) 93 if err != nil { 94 return err 95 } 96 return nil 97} 98