From 9d67f90d74bb9a10aa2cfaea84eed929f48f1dfe Mon Sep 17 00:00:00 2001 From: Charles Iliya Krempeaux Date: Tue, 23 Jan 2024 06:06:22 -0800 Subject: [PATCH] initial commits --- copyn.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 copyn.go diff --git a/copyn.go b/copyn.go new file mode 100644 index 0000000..706148f --- /dev/null +++ b/copyn.go @@ -0,0 +1,21 @@ +package raft + +import ( + "io" + + "sourcecode.social/reiver/go-erorr" +) + +// copyN is similar to io.CopyN(), except that if the number of bytes written (by io.CopyN()) is not 'n' then it returns an error. +func copyN(writer io.Writer, reader io.Reader, n int64) error { + + numWritten, err := io.CopyN(writer, reader, n) + if nil != err { + return erorr.Errorf("problem copying %d bytes from reader to writer: %w", n, err) + } + if expected, actual := n, numWritten ; expected != actual { + return erorr.Errorf("expected to write %d bytes but actually wrote %d bytes", expected, actual) + } + + return nil +}