diff options
author | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2025-01-05 15:16:26 -0800 |
---|---|---|
committer | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2025-01-05 15:29:23 -0800 |
commit | 2984a715b830410b6d6ce2a8aaa1fc8a2388ee99 (patch) | |
tree | 09dc00606931885e8b345791cd1a301335dd494c /adapters/messaging/messaging.go | |
parent | d86746bb0ddcb7dcfc6225f9fe37f6034c958913 (diff) | |
download | phoneof-2984a715b830410b6d6ce2a8aaa1fc8a2388ee99.tar.gz phoneof-2984a715b830410b6d6ce2a8aaa1fc8a2388ee99.zip |
add ntfy integration
Diffstat (limited to 'adapters/messaging/messaging.go')
-rw-r--r-- | adapters/messaging/messaging.go | 60 |
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 |