package redriver import ( "fmt" "net/url" "strings" "github.com/aws/aws-sdk-go-v2/aws/arn" ) func NameFromURL(qURL string) (name string, err error) { u, err := url.Parse(qURL) if err != nil { return "", fmt.Errorf("queue URL %q is not a valid URL: %w", qURL, err) } path := u.EscapedPath() parts := strings.Split(strings.Trim(path, "/"), "/") if len(parts) != 2 { return "", fmt.Errorf("queue path %q does not have exactly 2 parts", path) } return parts[1], nil } func NameFromARN(qARN arn.ARN) string { return qARN.Resource } func NameFromARNString(qARN string) (name string, err error) { a, err := arn.Parse(qARN) if err != nil { return "", fmt.Errorf("queue \"ARN\" %q is not an valid ARN", qARN) } return NameFromARN(a), nil } func URLFromARNString(qARN string) (name string, err error) { a, err := arn.Parse(qARN) if err != nil { return "", fmt.Errorf("queue \"ARN\" %q is not an valid ARN", qARN) } return URLFromARN(a) } func URLFromARN(qARN arn.ARN) (name string, err error) { path, err := url.JoinPath("/", qARN.AccountID, qARN.Resource) if err != nil { return "", fmt.Errorf("incorrect queue ARN: %w", err) } u := url.URL{ Scheme: "https", Host: fmt.Sprintf("%s.%s.%s", qARN.Service, qARN.Region, "amazonws.com"), Path: path, } return u.String(), nil }