argo.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package argo
  2. import (
  3. _ "embed"
  4. "encoding/json"
  5. "sync"
  6. "github.com/beeper/argo-go/wire"
  7. "github.com/beeper/argo-go/wirecodec"
  8. )
  9. var (
  10. Store map[string]wire.Type
  11. QueryIDToMessageName map[string]string
  12. //go:embed argo-wire-type-store.argo
  13. wireTypeStoreBytes []byte
  14. //go:embed name-to-queryids.json
  15. jsonMapBytes []byte
  16. loadOnce sync.Once
  17. initErr error
  18. )
  19. func Init() error {
  20. loadOnce.Do(func() {
  21. var err error
  22. Store, err = wirecodec.DecodeWireTypeStoreFile(wireTypeStoreBytes)
  23. if err != nil {
  24. initErr = err
  25. return
  26. }
  27. var src map[string]string
  28. if err := json.Unmarshal(jsonMapBytes, &src); err != nil {
  29. initErr = err
  30. return
  31. }
  32. m := make(map[string]string, len(src))
  33. for name, id := range src {
  34. m[id] = name
  35. }
  36. QueryIDToMessageName = m
  37. })
  38. return initErr
  39. }
  40. func GetStore() (map[string]wire.Type, error) {
  41. if err := Init(); err != nil {
  42. return nil, err
  43. }
  44. return Store, nil
  45. }
  46. func GetQueryIDToMessageName() (map[string]string, error) {
  47. if err := Init(); err != nil {
  48. return nil, err
  49. }
  50. return QueryIDToMessageName, nil
  51. }