From 5fba4efc1ed6913c1d50a5d8e65a126379134bdf Mon Sep 17 00:00:00 2001 From: Mzack9999 Date: Tue, 30 Jul 2024 15:18:44 +0200 Subject: [PATCH] moving error to new --- io/io.go | 20 ++++++++++++++++---- io/io_test.go | 23 ++++++++++------------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/io/io.go b/io/io.go index 9aef945..4ea74ad 100644 --- a/io/io.go +++ b/io/io.go @@ -1,24 +1,36 @@ package ioutil import ( + "errors" "io" "sync" ) +// SafeWriter is a thread-safe wrapper for io.Writer type SafeWriter struct { - writer io.Writer - mutex sync.Mutex + writer io.Writer // The underlying writer + mutex *sync.Mutex // Mutex for ensuring thread-safety } -func NewSafeWriter(writer io.Writer) *SafeWriter { - return &SafeWriter{ +// NewSafeWriter creates and returns a new SafeWriter +func NewSafeWriter(writer io.Writer) (*SafeWriter, error) { + // Check if the provided writer is nil + if writer == nil { + return nil, errors.New("writer is nil") + } + + safeWriter := &SafeWriter{ writer: writer, + mutex: &sync.Mutex{}, } + return safeWriter, nil } +// Write implements the io.Writer interface in a thread-safe manner func (sw *SafeWriter) Write(p []byte) (n int, err error) { sw.mutex.Lock() defer sw.mutex.Unlock() + if sw.writer == nil { return 0, io.ErrClosedPipe } diff --git a/io/io_test.go b/io/io_test.go index c34135f..a40d591 100644 --- a/io/io_test.go +++ b/io/io_test.go @@ -3,26 +3,23 @@ package ioutil import ( "strings" "testing" + + "github.com/stretchr/testify/require" ) func TestSafeWriter(t *testing.T) { t.Run("success", func(t *testing.T) { var sb strings.Builder - sw := NewSafeWriter(&sb) - _, err := sw.Write([]byte("test")) - if err != nil { - t.Fatalf("expected no error, got %v", err) - } - if sb.String() != "test" { - t.Fatalf("expected 'test', got '%s'", sb.String()) - } + sw, err := NewSafeWriter(&sb) + require.Nil(t, err) + _, err = sw.Write([]byte("test")) + require.Nil(t, err) + require.Equal(t, "test", sb.String()) }) t.Run("failure", func(t *testing.T) { - sw := NewSafeWriter(nil) - _, err := sw.Write([]byte("test")) - if err == nil { - t.Fatalf("expected error, got nil") - } + sw, err := NewSafeWriter(nil) + require.NotNil(t, err) + require.Nil(t, sw) }) }