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  }