Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.44 KB | None | 0 0
  1. package plugins
  2.  
  3. import (
  4. "github.com/goadesign/goa/design"
  5. "bytes"
  6. "io/ioutil"
  7. "github.com/goadesign/goa/goagen/codegen"
  8. "strings"
  9. )
  10.  
  11. // Generate generates artifacts from goa API DSL definitions.
  12. func Generate() (filenames []string, err error) {
  13.  
  14. api := design.Design
  15.  
  16. var buffer bytes.Buffer
  17.  
  18. for mediaTypeName, mediaType := range api.MediaTypes{
  19.  
  20. cleanMediaTypeName := strings.Replace(mediaTypeName, "application/vnd.", "", 1)
  21. cleanMediaTypeName = strings.Replace(cleanMediaTypeName, "+json", "", 1)
  22. cleanMediaTypeName = codegen.Goify(cleanMediaTypeName, true)
  23.  
  24. if mediaType.HasAttributes() && "" != mediaType.Name() {
  25.  
  26. writeMediaType(cleanMediaTypeName, mediaType, &buffer)
  27. }
  28. }
  29.  
  30. ioutil.WriteFile("foo.txt", buffer.Bytes(), 0644)
  31.  
  32. return []string{"foo.txt"}, err
  33. }
  34.  
  35.  
  36. func writeMediaType(mediaTypeName string, mediaType *design.MediaTypeDefinition, buffer *bytes.Buffer) {
  37.  
  38. buffer.WriteString("export Class ")
  39. buffer.WriteString(mediaTypeName)
  40. buffer.WriteString("{\n")
  41.  
  42. attributesByName := mediaType.ToObject()
  43.  
  44. for name, attribute := range attributesByName {
  45.  
  46. handleAttribute(name, attribute, buffer)
  47. }
  48.  
  49. buffer.WriteString("}\n\n")
  50. }
  51.  
  52. func handleAttribute(attributeName string, attributeDefinition *design.AttributeDefinition, buffer *bytes.Buffer) {
  53.  
  54. buffer.WriteString("\t")
  55.  
  56. buffer.WriteString(attributeName)
  57. buffer.WriteString(": ")
  58.  
  59. switch attributeDefinition.Type.Kind() {
  60.  
  61. case design.BooleanKind:
  62.  
  63. buffer.WriteString("boolean")
  64. break
  65. case design.IntegerKind:
  66.  
  67. buffer.WriteString("number")
  68. break
  69. case design.NumberKind:
  70.  
  71. buffer.WriteString("number")
  72. break
  73. case design.StringKind:
  74.  
  75. buffer.WriteString("string")
  76. break
  77. case design.DateTimeKind:
  78.  
  79. buffer.WriteString("Date")
  80. break
  81. case design.UUIDKind:
  82.  
  83. buffer.WriteString("string")
  84. break
  85. case design.AnyKind:
  86.  
  87. buffer.WriteString("object")
  88. break
  89. case design.ArrayKind:
  90.  
  91. buffer.WriteString("array???")
  92. break
  93. case design.ObjectKind:
  94.  
  95. buffer.WriteString("ObjectKind nesting not supported")
  96. break
  97. case design.HashKind:
  98.  
  99. buffer.WriteString("string")
  100. break
  101. case design.UserTypeKind:
  102.  
  103. buffer.WriteString("UserTypeKind: nesting not supported")
  104. //return "", errors.New("Nested User Types are not supported yet.")
  105. break
  106. case design.MediaTypeKind:
  107.  
  108. buffer.WriteString("MediaTypeKind: nesting not supported")
  109. //return "", errors.New("Nested Media Types are not supported yet.")
  110. break
  111. }
  112.  
  113. buffer.WriteString(";\n")
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement