package main import ( "context" "fmt" ) type SlackToMessage struct { pipeline Pipeline } func NewSlackToMessagePipeline(ctx context.Context, cfg Config) (Pipeline, error) { reader, err := NewQueue(ctx, "slack_event", cfg.driver) if err != nil { return Pipeline{}, err } writer, err := NewQueue(ctx, "new_message", cfg.driver) if err != nil { return Pipeline{}, err } return Pipeline{ writer: writer, reader: reader, process: newSlackToMessageProcess(cfg), }, nil } func newSlackToMessageProcess(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 } }