github.com/profzone/eden-framework@v1.0.10/internal/generator/client_generator.go (about)

     1  package generator
     2  
     3  import (
     4  	"encoding/json"
     5  	"github.com/profzone/eden-framework/internal/generator/api"
     6  	"github.com/profzone/eden-framework/internal/generator/files"
     7  	"github.com/sirupsen/logrus"
     8  	"io/ioutil"
     9  	"net/http"
    10  	"net/url"
    11  	"path"
    12  )
    13  
    14  type ClientGenerator struct {
    15  	Api         api.Api
    16  	serviceName string
    17  }
    18  
    19  func NewClientGenerator(pkgName string) *ClientGenerator {
    20  	return &ClientGenerator{
    21  		serviceName: pkgName,
    22  	}
    23  }
    24  
    25  func (c *ClientGenerator) Load(path string) {
    26  	urlPattern, err := url.Parse(path)
    27  	if err != nil {
    28  		logrus.Panic(err)
    29  	}
    30  	if urlPattern.Scheme == "" {
    31  		// 本地文件
    32  		err = c.loadLocalFile(urlPattern.Path)
    33  	} else if urlPattern.Scheme == "http" || urlPattern.Scheme == "https" {
    34  		// 远程文件
    35  		err = c.loadRemoteFile(urlPattern.Path)
    36  	} else {
    37  		logrus.Panicf("unsupported scheme %s", urlPattern.Scheme)
    38  	}
    39  	if err != nil {
    40  		logrus.Panic(err)
    41  	}
    42  
    43  	if c.serviceName == "" {
    44  		c.serviceName = c.Api.ServiceName
    45  	}
    46  }
    47  
    48  func (c *ClientGenerator) loadLocalFile(path string) (err error) {
    49  	bytes, err := ioutil.ReadFile(path)
    50  	if err != nil {
    51  		return
    52  	}
    53  
    54  	err = json.Unmarshal(bytes, &c.Api)
    55  	return
    56  }
    57  
    58  func (c *ClientGenerator) loadRemoteFile(path string) (err error) {
    59  	resp, err := http.Get(path)
    60  	if err != nil {
    61  		return
    62  	}
    63  
    64  	bytes, err := ioutil.ReadAll(resp.Body)
    65  	if err != nil {
    66  		return
    67  	}
    68  
    69  	err = json.Unmarshal(bytes, &c.Api)
    70  	return
    71  }
    72  
    73  func (c *ClientGenerator) Pick() {
    74  }
    75  
    76  func (c *ClientGenerator) Output(outputPath string) Outputs {
    77  	outputs := Outputs{}
    78  
    79  	clientFile := files.NewClientFile(c.serviceName, &c.Api)
    80  	clientEnumsFile := files.NewClientEnumsFile(outputPath, c.serviceName, &c.Api)
    81  	typesFile := files.NewTypesFile(c.serviceName, &c.Api)
    82  
    83  	outputs.Add(GeneratedSuffix(path.Join(outputPath, clientFile.PackageName, "client.go")), clientFile.String())
    84  	outputs.Add(GeneratedSuffix(path.Join(outputPath, clientFile.PackageName, "types.go")), typesFile.String())
    85  	outputs.Add(GeneratedSuffix(path.Join(outputPath, clientFile.PackageName, "enums.go")), clientEnumsFile.String())
    86  
    87  	return outputs
    88  }