package main import ( "context" ) type MessageToPersistence struct { pipeline Pipeline } func NewMessageToPersistencePipeline(ctx context.Context, cfg Config) (Pipeline, error) { reader, err := NewQueue(ctx, "new_message", cfg.driver) if err != nil { return Pipeline{}, err } writer, err := NewQueue(ctx, "new_persistence", cfg.driver) if err != nil { return Pipeline{}, err } return Pipeline{ writer: writer, reader: reader, process: newMessageToPersistenceProcess(cfg.storage), }, nil } func newMessageToPersistenceProcess(storage Storage) processFunc { return func(ctx context.Context, msg []byte) ([]byte, error) { m, err := Deserialize(msg) if err != nil { return nil, err } if err := storage.UpsertMessage(ctx, m); err != nil { return nil, err } return msg, nil } }