endpoints.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // +build codegen
  2. package model
  3. import (
  4. "bytes"
  5. "go/format"
  6. "io"
  7. "text/template"
  8. )
  9. // GenerateEndpoints writes a Go file to the given writer.
  10. func GenerateEndpoints(endpoints interface{}, w io.Writer) error {
  11. tmpl, err := template.New("endpoints").Parse(t)
  12. if err != nil {
  13. return err
  14. }
  15. out := bytes.NewBuffer(nil)
  16. if err = tmpl.Execute(out, endpoints); err != nil {
  17. return err
  18. }
  19. b, err := format.Source(bytes.TrimSpace(out.Bytes()))
  20. if err != nil {
  21. return err
  22. }
  23. _, err = io.Copy(w, bytes.NewReader(b))
  24. return err
  25. }
  26. const t = `
  27. package endpoints
  28. // THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
  29. type endpointStruct struct {
  30. Version int
  31. Endpoints map[string]endpointEntry
  32. }
  33. type endpointEntry struct {
  34. Endpoint string
  35. SigningRegion string
  36. }
  37. var endpointsMap = endpointStruct{
  38. Version: {{ .Version }},
  39. Endpoints: map[string]endpointEntry{
  40. {{ range $key, $entry := .Endpoints }}"{{ $key }}": endpointEntry{
  41. Endpoint: "{{ $entry.Endpoint }}",
  42. {{ if ne $entry.SigningRegion "" }}SigningRegion: "{{ $entry.SigningRegion }}",
  43. {{ end }}
  44. },
  45. {{ end }}
  46. },
  47. }
  48. `