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(&params)
    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  }