converters.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package redriver
  2. import (
  3. "fmt"
  4. "net/url"
  5. "strings"
  6. "github.com/aws/aws-sdk-go-v2/aws/arn"
  7. )
  8. func NameFromURL(qURL string) (name string, err error) {
  9. u, err := url.Parse(qURL)
  10. if err != nil {
  11. return "", fmt.Errorf("queue URL %q is not a valid URL: %w", qURL, err)
  12. }
  13. path := u.EscapedPath()
  14. parts := strings.Split(strings.Trim(path, "/"), "/")
  15. if len(parts) != 2 {
  16. return "", fmt.Errorf("queue path %q does not have exactly 2 parts", path)
  17. }
  18. return parts[1], nil
  19. }
  20. func NameFromARN(qARN arn.ARN) string {
  21. return qARN.Resource
  22. }
  23. func NameFromARNString(qARN string) (name string, err error) {
  24. a, err := arn.Parse(qARN)
  25. if err != nil {
  26. return "", fmt.Errorf("queue \"ARN\" %q is not an valid ARN", qARN)
  27. }
  28. return NameFromARN(a), nil
  29. }
  30. func URLFromARNString(qARN string) (name string, err error) {
  31. a, err := arn.Parse(qARN)
  32. if err != nil {
  33. return "", fmt.Errorf("queue \"ARN\" %q is not an valid ARN", qARN)
  34. }
  35. return URLFromARN(a)
  36. }
  37. func URLFromARN(qARN arn.ARN) (name string, err error) {
  38. path, err := url.JoinPath("/", qARN.AccountID, qARN.Resource)
  39. if err != nil {
  40. return "", fmt.Errorf("incorrect queue ARN: %w", err)
  41. }
  42. u := url.URL{
  43. Scheme: "https",
  44. Host: fmt.Sprintf("%s.%s.%s", qARN.Service, qARN.Region, "amazonws.com"),
  45. Path: path,
  46. }
  47. return u.String(), nil
  48. }