public static Worker <Block, Block> CreateDestinationWorker(BinaryWriter writer, int blocksNumber, int blockLength, PackerMode packerMode, IGettableConveyer <Block> gettableConveyer, ILoggable logger) { IPuttableConveyer <Block> puttableConveyer; if (packerMode == PackerMode.Pack) { BinaryBlockWriter.WriteInfo(writer, blocksNumber, blockLength); puttableConveyer = new PutOnlyConveyer <Block>((Block block) => { BinaryBlockWriter.WritePackedBlock(writer, block); }); } else { puttableConveyer = new PutOnlyConveyer <Block>((Block block) => { BinaryBlockWriter.WriteBlock(writer, block, blockLength); }); } return(new Worker <Block, Block>("Destination", gettableConveyer, puttableConveyer, logger, block => block)); }