upd(messaging): update codegen, add spec to codegen
This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"encoding/json"
|
||||
"io/ioutil"
|
||||
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
)
|
||||
|
||||
type SpecFile []*SpecEntry
|
||||
|
||||
type SpecEntry struct {
|
||||
Title string
|
||||
Description string
|
||||
Protocol string
|
||||
Authentication []string
|
||||
Entrypoint string
|
||||
Path string
|
||||
Struct interface{}
|
||||
Parameters map[string]interface{}
|
||||
APIs []*SpecAPI
|
||||
}
|
||||
|
||||
func (s *SpecEntry) toOutFile() OutFile {
|
||||
file := OutFile{
|
||||
APIs: []*OutFileAPI{},
|
||||
}
|
||||
s.applyToOutFile(&file)
|
||||
return file
|
||||
}
|
||||
|
||||
func (s *SpecEntry) applyToOutFile(o *OutFile) {
|
||||
// reset title/interface/path to spec data
|
||||
o.Title = s.Title
|
||||
o.Description = s.Description
|
||||
o.Parameters = s.Parameters
|
||||
o.Interface = strings.ToUpper(s.Entrypoint[0:1]) + s.Entrypoint[1:]
|
||||
o.Path = s.Path
|
||||
if o.Path == "" {
|
||||
o.Path = "/" + s.Entrypoint
|
||||
}
|
||||
o.Struct = s.Struct
|
||||
o.Protocol = s.Protocol
|
||||
o.Authentication = s.Authentication
|
||||
|
||||
namedAPIs := o.NamedAPIs()
|
||||
|
||||
for _, val := range s.APIs {
|
||||
path := val.Path
|
||||
if path == "" {
|
||||
path = "/" + val.Name
|
||||
}
|
||||
// add new API calls
|
||||
call, ok := namedAPIs[val.Name]
|
||||
if !ok {
|
||||
o.APIs = append(o.APIs, &OutFileAPI{
|
||||
Name: val.Name,
|
||||
Method: val.Method,
|
||||
Title: val.Title,
|
||||
Path: path,
|
||||
Parameters: val.Parameters,
|
||||
})
|
||||
} else {
|
||||
// update title/method/path of existing APIs
|
||||
call.Name = val.Name
|
||||
call.Title = val.Title
|
||||
call.Method = val.Method
|
||||
call.Path = path
|
||||
if val.Parameters != nil {
|
||||
call.Parameters = val.Parameters
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type SpecAPI struct {
|
||||
Name string
|
||||
Method string
|
||||
Title string
|
||||
Path string
|
||||
Parameters map[string]interface{}
|
||||
}
|
||||
|
||||
type OutFile struct {
|
||||
Title string
|
||||
Description string `json:",omitempty"`
|
||||
Interface string
|
||||
Struct interface{}
|
||||
Parameters map[string]interface{}
|
||||
Protocol string
|
||||
Authentication []string
|
||||
Path string
|
||||
APIs []*OutFileAPI
|
||||
}
|
||||
|
||||
func (o *OutFile) NamedAPIs() map[string]*OutFileAPI {
|
||||
apis := map[string]*OutFileAPI{}
|
||||
for _, api := range o.APIs {
|
||||
apis[api.Name] = api
|
||||
}
|
||||
return apis
|
||||
}
|
||||
|
||||
type OutFileAPI struct {
|
||||
Name string
|
||||
Method string
|
||||
Title string
|
||||
Description string `json:",omitempty"`
|
||||
Path string
|
||||
Parameters map[string]interface{}
|
||||
}
|
||||
|
||||
func main() {
|
||||
debug := false
|
||||
|
||||
raw, err := ioutil.ReadFile("./spec.json")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
var spec SpecFile
|
||||
json.Unmarshal(raw, &spec)
|
||||
|
||||
os.Mkdir("./spec", 0755)
|
||||
for _, val := range spec {
|
||||
filename := val.Entrypoint + ".json"
|
||||
var file OutFile
|
||||
contents, err := ioutil.ReadFile("./" + filename)
|
||||
if err != nil {
|
||||
file = val.toOutFile()
|
||||
} else {
|
||||
err = json.Unmarshal(contents, &file)
|
||||
if err != nil {
|
||||
log.Fatal("Error parsing ", filename, ": ", err)
|
||||
}
|
||||
val.applyToOutFile(&file)
|
||||
}
|
||||
raw, _ := json.MarshalIndent(file, "", " ")
|
||||
ioutil.WriteFile("./spec/"+filename, raw, 0644)
|
||||
fmt.Println(filename)
|
||||
}
|
||||
|
||||
if debug {
|
||||
spew.Dump(spec)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user