// Copyright 2020 The Swarm Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package pipeline import "io" // ChainWriter is a writer in a pipeline. // It is up to the implementer to decide whether a writer // calls the next writer or not. Implementers should // call the Sum method of the subsequent writer in case there // exists one. type ChainWriter interface { ChainWrite(*PipeWriteArgs) error Sum() ([]byte, error) } // Interface exposes an `io.Writer` and `Sum` method, for components to use as a black box. // Within a pipeline, writers are chainable. It is up for the implementer to decide whether // a writer calls the next writer. Implementers should always implement the `Sum` method // and call the next writer's `Sum` method (in case there is one), returning its result to // the calling context. type Interface interface { io.Writer Sum() ([]byte, error) } // PipeWriteArgs are passed between different ChainWriters. type PipeWriteArgs struct { Ref []byte // reference, generated by bmt Key []byte // encryption key Span []byte // always unecrypted span uint64 Data []byte // data includes the span too, but it may be encrypted when the pipeline is encrypted } type PipelineFunc func() ChainWriter