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 }