github.com/aavshr/aws-sdk-go@v1.41.3/example/service/sqs/mockingClientsForTests/ifaceExample.go (about) 1 //go:build example 2 // +build example 3 4 package main 5 6 import ( 7 "encoding/json" 8 "fmt" 9 "os" 10 11 "github.com/aavshr/aws-sdk-go/aws" 12 "github.com/aavshr/aws-sdk-go/aws/session" 13 "github.com/aavshr/aws-sdk-go/service/sqs" 14 "github.com/aavshr/aws-sdk-go/service/sqs/sqsiface" 15 ) 16 17 func main() { 18 if len(os.Args) < 2 { 19 fmt.Fprintln(os.Stderr, "Queue URL required.") 20 os.Exit(1) 21 } 22 23 sess := session.Must(session.NewSession()) 24 25 q := Queue{ 26 Client: sqs.New(sess), 27 URL: os.Args[1], 28 } 29 30 msgs, err := q.GetMessages(20) 31 if err != nil { 32 fmt.Fprintln(os.Stderr, err.Error()) 33 os.Exit(1) 34 } 35 36 fmt.Println("Messages:") 37 for _, msg := range msgs { 38 fmt.Printf("%s>%s: %s\n", msg.From, msg.To, msg.Msg) 39 } 40 } 41 42 // Queue provides the ability to handle SQS messages. 43 type Queue struct { 44 Client sqsiface.SQSAPI 45 URL string 46 } 47 48 // Message is a concrete representation of the SQS message 49 type Message struct { 50 From string `json:"from"` 51 To string `json:"to"` 52 Msg string `json:"msg"` 53 } 54 55 // GetMessages returns the parsed messages from SQS if any. If an error 56 // occurs that error will be returned. 57 func (q *Queue) GetMessages(waitTimeout int64) ([]Message, error) { 58 params := sqs.ReceiveMessageInput{ 59 QueueUrl: aws.String(q.URL), 60 } 61 if waitTimeout > 0 { 62 params.WaitTimeSeconds = aws.Int64(waitTimeout) 63 } 64 resp, err := q.Client.ReceiveMessage(¶ms) 65 if err != nil { 66 return nil, fmt.Errorf("failed to get messages, %v", err) 67 } 68 69 msgs := make([]Message, len(resp.Messages)) 70 for i, msg := range resp.Messages { 71 parsedMsg := Message{} 72 if err := json.Unmarshal([]byte(aws.StringValue(msg.Body)), &parsedMsg); err != nil { 73 return nil, fmt.Errorf("failed to unmarshal message, %v", err) 74 } 75 76 msgs[i] = parsedMsg 77 } 78 79 return msgs, nil 80 }