package main import ( "context" "fmt" ) type MessageToPersistence struct { pipeline Pipeline } func NewMessageToPersistencePipeline(ctx context.Context, cfg Config) (Pipeline, error) { reader, err := NewQueue(ctx, "fromSlack", cfg.driver) if err != nil { return Pipeline{}, err } writer, err := NewQueue(ctx, "fromMessage", cfg.driver) if err != nil { return Pipeline{}, err } return Pipeline{ writer: writer, reader: reader, process: newMessageToPersistenceProcess(cfg), }, nil } func newMessageToPersistenceProcess(cfg Config) processFunc { return func(ctx context.Context, slack []byte) ([]byte, error) { m, err := ParseSlack(slack, cfg.AssetPattern, cfg.DatacenterPattern, cfg.EventNamePattern) if err != nil { return nil, fmt.Errorf("failed to deserialize slack %w: %s", err, slack) } return m.Serialize(), nil } }