package script import "context" // Chain chains provided Processors. // When an error is returned by a Processor in chain, processing // stops and the error is retuned without running further stages. func ChainProcessor(processors ...Processor) Processor { return func(ctx context.Context, in []string) ([]string, error) { var err error for _, p := range processors { // not checking ctx expiry here, // let the processor handle it in, err = p(ctx, in) if err != nil { return nil, err } } return in, nil } } type chainWriter struct { w []Writer } func (c *chainWriter) Write(in []string) error { for _, w := range c.w { if err := w.Write(in); err != nil { return err } } return nil } func ChainWriter(writers ...Writer) Writer { return &chainWriter{ w: writers, } }