summaryrefslogtreecommitdiff
path: root/adapters/messaging/messaging.go
diff options
context:
space:
mode:
Diffstat (limited to 'adapters/messaging/messaging.go')
-rw-r--r--adapters/messaging/messaging.go60
1 files changed, 58 insertions, 2 deletions
diff --git a/adapters/messaging/messaging.go b/adapters/messaging/messaging.go
index 607258a..f802503 100644
--- a/adapters/messaging/messaging.go
+++ b/adapters/messaging/messaging.go
@@ -1,5 +1,61 @@
package messaging
-type MessagingAdapter interface {
- SendMessage(message string) (string, error)
+import (
+ "fmt"
+ "log"
+ "strings"
+ "time"
+)
+
+type Message struct {
+ FrenName string
+ Message string
+}
+
+func (m *Message) Encode() string {
+ return m.FrenName + " " + m.Message
+}
+
+func Decode(message string) (*Message, error) {
+ content := strings.SplitN(message, " ", 2)
+ if len(content) < 2 {
+ return nil, fmt.Errorf("no space delimiter")
+ }
+ return &Message{
+ FrenName: content[0],
+ Message: content[1],
+ }, nil
+}
+
+func IdContinuation(message Message) ContinuationChain {
+ return func(success Continuation, _failure Continuation) ContinuationChain {
+ return success(message)
+ }
}
+
+func FailurePassingContinuation(message Message) ContinuationChain {
+ return func(_success Continuation, failure Continuation) ContinuationChain {
+ return failure(message)
+ }
+}
+
+func LogContinuation(message Message) ContinuationChain {
+ return func(success Continuation, _failure Continuation) ContinuationChain {
+ now := time.Now().UTC()
+
+ log.Println(now, message)
+ return success(message)
+ }
+}
+
+// basically b(a(message)) if and only if b is successful
+func Compose(a Continuation, b Continuation) Continuation {
+ return func(message Message) ContinuationChain {
+ return func(success Continuation, failure Continuation) ContinuationChain {
+ return b(message)(a, FailurePassingContinuation)(success, failure)
+ }
+ }
+}
+
+type Continuation func(Message) ContinuationChain
+type ContinuationChain func(Continuation, Continuation) ContinuationChain