# Functions
BufferMessage works the same as CopyMessage and it also bounds the original Message lifecycle to the newly created message: calling Finish() on the returned message calls m.Finish().
CopyMessage reads m once and creates an in-memory copy depending on the encoding of m.
WithAcksBeforeFinish returns a wrapper for m that calls m.Finish() only after the specified number of acks are received.