github.com/unionj-cloud/go-doudou@v1.3.8-0.20221011095552-0088008e5b31/cmd/internal/svc/codegen/httpiclient.go (about) 1 package codegen 2 3 import ( 4 "bufio" 5 "bytes" 6 "github.com/sirupsen/logrus" 7 "github.com/unionj-cloud/go-doudou/cmd/internal/astutils" 8 "github.com/unionj-cloud/go-doudou/toolkit/copier" 9 "github.com/unionj-cloud/go-doudou/version" 10 "os" 11 "path/filepath" 12 "strings" 13 "text/template" 14 ) 15 16 var iclientTmpl = `/** 17 * Generated by go-doudou {{.Version}}. 18 * Don't edit! 19 */ 20 package client 21 22 import ( 23 "context" 24 "github.com/go-resty/resty/v2" 25 "{{.VoPackage}}" 26 v3 "github.com/unionj-cloud/go-doudou/toolkit/openapi/v3" 27 "os" 28 ) 29 30 type I{{.Meta.Name}}Client interface { 31 {{- range $m := .Meta.Methods }} 32 {{$m.Name}}(ctx context.Context, _headers map[string]string, {{- range $i, $p := $m.Params}} 33 {{- if ne $p.Type "context.Context" }} 34 {{- $p.Name}} {{$p.Type}}, 35 {{- end }} 36 {{- end }}) (_resp *resty.Response, {{- range $i, $r := $m.Results}} 37 {{- if $i}},{{end}} 38 {{- $r.Name}} {{$r.Type}} 39 {{- end }}) 40 {{- end }} 41 } 42 ` 43 44 // GenGoIClient generates golang http client interface code from result of parsing svc.go file in project root path 45 func GenGoIClient(dir string, ic astutils.InterfaceCollector) { 46 var ( 47 err error 48 clientfile string 49 f *os.File 50 tpl *template.Template 51 sqlBuf bytes.Buffer 52 clientDir string 53 fi os.FileInfo 54 source string 55 modfile string 56 modName string 57 firstLine string 58 modf *os.File 59 meta astutils.InterfaceMeta 60 ) 61 clientDir = filepath.Join(dir, "client") 62 if err = os.MkdirAll(clientDir, os.ModePerm); err != nil { 63 panic(err) 64 } 65 66 clientfile = filepath.Join(clientDir, "iclient.go") 67 fi, err = os.Stat(clientfile) 68 if err != nil && !os.IsNotExist(err) { 69 panic(err) 70 } 71 if fi != nil { 72 logrus.Warningln("file iclient.go will be overwritten") 73 } 74 if f, err = os.Create(clientfile); err != nil { 75 panic(err) 76 } 77 defer f.Close() 78 79 err = copier.DeepCopy(ic.Interfaces[0], &meta) 80 if err != nil { 81 panic(err) 82 } 83 84 modfile = filepath.Join(dir, "go.mod") 85 if modf, err = os.Open(modfile); err != nil { 86 panic(err) 87 } 88 reader := bufio.NewReader(modf) 89 firstLine, _ = reader.ReadString('\n') 90 modName = strings.TrimSpace(strings.TrimPrefix(firstLine, "module")) 91 92 if tpl, err = template.New("iclient.go.tmpl").Parse(iclientTmpl); err != nil { 93 panic(err) 94 } 95 if err = tpl.Execute(&sqlBuf, struct { 96 VoPackage string 97 Meta astutils.InterfaceMeta 98 Version string 99 }{ 100 VoPackage: modName + "/vo", 101 Meta: meta, 102 Version: version.Release, 103 }); err != nil { 104 panic(err) 105 } 106 107 source = strings.TrimSpace(sqlBuf.String()) 108 astutils.FixImport([]byte(source), clientfile) 109 }