Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. type Queue interface {
  2. AddMessageToQueue(msg QueueMessage)
  3. }
  4.  
  5. type QueueMessage interface {
  6. ToSQSFormat() ...
  7. ToAzureFormat() ...
  8. ...
  9. }
  10.  
  11. type QueueMessage interface {
  12. Format() []byte
  13. }
  14.  
  15. type SQSFormat struct {
  16. ID string
  17. Payload string
  18. At time.Time
  19. }
  20.  
  21. func (s SQSFormat) Format() []byte {
  22. return []byte(fmt.Sprintf("%+v", s))
  23. }
  24.  
  25. type AzureFormat struct {
  26. Channel string
  27. Payload string
  28. }
  29.  
  30. func (a AzureFormat) Format() []byte {
  31. return []byte(fmt.Sprintf("%+v", a))
  32. }
  33.  
  34. type Queue interface {
  35. AddMessageToQueue(msg QueueMessage)
  36. ProcessMessages()
  37. }
  38.  
  39. type MessageQueue struct{
  40. Messages []QueueMessage
  41. }
  42.  
  43. func (m *MessageQueue) AddMessageToQueue(msg QueueMessage) {
  44. if m.Messages == nil {
  45. m.Messages = []QueueMessage{}
  46. }
  47. m.Messages = append(m.Messages, msg)
  48. }
  49.  
  50. func (m *MessageQueue) ProcessMessages() {
  51. for _, msg := range m.Messages {
  52. fmt.Println(string(msg.Format())) // <- will print the formatted message based on the concrete type specified
  53. }
  54. }
  55.  
  56. func main() {
  57. var mq Queue = &MessageQueue{}
  58. var SQSMsg = SQSFormat{
  59. ID: "id",
  60. Payload: "something happened",
  61. At: time.Now(),
  62. }
  63. mq.AddMessageToQueue(SQSMsg)
  64.  
  65. var azureMsg = AzureFormat{
  66. Channel: "channel",
  67. Payload: "something happened",
  68. }
  69. mq.AddMessageToQueue(azureMsg)
  70.  
  71. mq.ProcessMessages()
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement