github.com/vcilabs/webrpc@v0.5.2-0.20201116131534-162e27b1b33b/gen/javascript/gen.go (about) 1 //go:generate statik -src=./templates -dest=. -f -Z -p=embed 2 package javascript 3 4 import ( 5 "bytes" 6 "io/ioutil" 7 "os" 8 "text/template" 9 10 "github.com/goware/statik/fs" 11 "github.com/webrpc/webrpc/gen" 12 "github.com/webrpc/webrpc/gen/javascript/embed" 13 "github.com/webrpc/webrpc/schema" 14 ) 15 16 func init() { 17 gen.Register("js", &generator{}) 18 } 19 20 type generator struct{} 21 22 func (g *generator) Gen(proto *schema.WebRPCSchema, opts gen.TargetOptions) (string, error) { 23 var schemaHash = "" 24 var err error 25 // Get templates from `embed` asset package 26 // NOTE: make sure to `go generate` whenever you change the files in `templates/` folder 27 templates, err := getTemplates() 28 if err != nil { 29 return "", err 30 } 31 32 // Load templates 33 tmpl := template. 34 New("webrpc-gen-js"). 35 Funcs(templateFuncMap(opts)) 36 37 for _, tmplData := range templates { 38 _, err = tmpl.Parse(tmplData) 39 if err != nil { 40 return "", err 41 } 42 } 43 44 // generate deterministic schema hash of the proto file 45 if proto.SchemaType != "go" { 46 schemaHash, err = proto.SchemaHash() 47 if err != nil { 48 return "", err 49 } 50 } 51 52 // template vars 53 vars := struct { 54 *schema.WebRPCSchema 55 SchemaHash string 56 TargetOpts gen.TargetOptions 57 }{ 58 proto, schemaHash, opts, 59 } 60 61 // Generate the template 62 genBuf := bytes.NewBuffer(nil) 63 err = tmpl.ExecuteTemplate(genBuf, "proto", vars) 64 if err != nil { 65 return "", err 66 } 67 68 return string(genBuf.Bytes()), nil 69 } 70 71 func getTemplates() (map[string]string, error) { 72 data := map[string]string{} 73 74 statikFS, err := fs.New(embed.Asset) 75 if err != nil { 76 return nil, err 77 } 78 79 fs.Walk(statikFS, "/", func(path string, info os.FileInfo, err error) error { 80 if path == "/" { 81 return nil 82 } 83 f, err := statikFS.Open(path) 84 if err != nil { 85 return err 86 } 87 buf, err := ioutil.ReadAll(f) 88 if err != nil { 89 return err 90 } 91 data[path] = string(buf) 92 return nil 93 }) 94 95 return data, nil 96 }