github.com/mloves0824/enron/cmd/enron@v0.0.0-20230830012320-113bbf6be3c8/internal/proto/add/proto.go (about) 1 package add 2 3 import ( 4 "fmt" 5 "os" 6 "path/filepath" 7 ) 8 9 // Proto is a proto generator. 10 type Proto struct { 11 Name string 12 Path string 13 Service string 14 Package string 15 GoPackage string 16 JavaPackage string 17 } 18 19 // Generate generate a proto template. 20 func (p *Proto) Generate() error { 21 body, err := p.execute() 22 if err != nil { 23 return err 24 } 25 wd, err := os.Getwd() 26 if err != nil { 27 panic(err) 28 } 29 to := filepath.Join(wd, p.Path) 30 if _, err := os.Stat(to); os.IsNotExist(err) { 31 if err := os.MkdirAll(to, 0o700); err != nil { 32 return err 33 } 34 } 35 name := filepath.Join(to, p.Name) 36 if _, err := os.Stat(name); !os.IsNotExist(err) { 37 return fmt.Errorf("%s already exists", p.Name) 38 } 39 return os.WriteFile(name, body, 0o644) 40 }