Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package plugins
- import (
- "github.com/goadesign/goa/design"
- "bytes"
- "io/ioutil"
- "github.com/goadesign/goa/goagen/codegen"
- "strings"
- )
- // Generate generates artifacts from goa API DSL definitions.
- func Generate() (filenames []string, err error) {
- api := design.Design
- var buffer bytes.Buffer
- for mediaTypeName, mediaType := range api.MediaTypes{
- cleanMediaTypeName := strings.Replace(mediaTypeName, "application/vnd.", "", 1)
- cleanMediaTypeName = strings.Replace(cleanMediaTypeName, "+json", "", 1)
- cleanMediaTypeName = codegen.Goify(cleanMediaTypeName, true)
- if mediaType.HasAttributes() && "" != mediaType.Name() {
- writeMediaType(cleanMediaTypeName, mediaType, &buffer)
- }
- }
- ioutil.WriteFile("foo.txt", buffer.Bytes(), 0644)
- return []string{"foo.txt"}, err
- }
- func writeMediaType(mediaTypeName string, mediaType *design.MediaTypeDefinition, buffer *bytes.Buffer) {
- buffer.WriteString("export Class ")
- buffer.WriteString(mediaTypeName)
- buffer.WriteString("{\n")
- attributesByName := mediaType.ToObject()
- for name, attribute := range attributesByName {
- handleAttribute(name, attribute, buffer)
- }
- buffer.WriteString("}\n\n")
- }
- func handleAttribute(attributeName string, attributeDefinition *design.AttributeDefinition, buffer *bytes.Buffer) {
- buffer.WriteString("\t")
- buffer.WriteString(attributeName)
- buffer.WriteString(": ")
- switch attributeDefinition.Type.Kind() {
- case design.BooleanKind:
- buffer.WriteString("boolean")
- break
- case design.IntegerKind:
- buffer.WriteString("number")
- break
- case design.NumberKind:
- buffer.WriteString("number")
- break
- case design.StringKind:
- buffer.WriteString("string")
- break
- case design.DateTimeKind:
- buffer.WriteString("Date")
- break
- case design.UUIDKind:
- buffer.WriteString("string")
- break
- case design.AnyKind:
- buffer.WriteString("object")
- break
- case design.ArrayKind:
- buffer.WriteString("array???")
- break
- case design.ObjectKind:
- buffer.WriteString("ObjectKind nesting not supported")
- break
- case design.HashKind:
- buffer.WriteString("string")
- break
- case design.UserTypeKind:
- buffer.WriteString("UserTypeKind: nesting not supported")
- //return "", errors.New("Nested User Types are not supported yet.")
- break
- case design.MediaTypeKind:
- buffer.WriteString("MediaTypeKind: nesting not supported")
- //return "", errors.New("Nested Media Types are not supported yet.")
- break
- }
- buffer.WriteString(";\n")
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement