Skip to content

Commit

Permalink
csv: Add SkipWriteFields (#39)
Browse files Browse the repository at this point in the history
  • Loading branch information
sunshineplan committed Mar 22, 2024
1 parent f2acf33 commit deb39ce
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
6 changes: 5 additions & 1 deletion csv/writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ func NewWriter(w io.Writer, utf8bom bool) *Writer {
}
}

func (w *Writer) SkipWriteFields() {
w.fieldsWritten = true
}

// WriteFields writes fieldnames to w along with necessary utf8bom bytes. The fields must be a
// non-zero field struct or a non-zero length string slice, otherwise an error will be return.
// It can be run only once.
Expand Down Expand Up @@ -164,7 +168,7 @@ func (w *Writer) Write(record any) error {
if len(rec) == 0 {
return nil
}
return w.Writer.Write(r)
return w.Writer.Write(rec)
} else if d, ok := record.(D); ok {
for i, field := range w.fields {
for _, e := range d {
Expand Down
28 changes: 26 additions & 2 deletions csv/writer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ import (
func TestWriteFields(t *testing.T) {
w := NewWriter(io.Discard, false)
if err := w.Write(map[string]string{"test": "test"}); err == nil {
t.Error("gave nil error; want error")
t.Fatal("gave nil error; want error")
}
if err := w.WriteFields(map[string]string{"test": "test"}); err == nil {
t.Error("gave nil error; want error")
t.Fatal("gave nil error; want error")
}
if err := w.WriteFields(struct {
A string
Expand All @@ -27,6 +27,30 @@ func TestWriteFields(t *testing.T) {
}
}

func TestSkipWriteFields(t *testing.T) {
var buf bytes.Buffer
w := NewWriter(&buf, false)
if err := w.WriteFields([]string{"A", "B"}); err != nil {
t.Fatal(err)
}
if err := w.Write([]string{"a", "b"}); err != nil {
t.Fatal(err)
}
w.Flush()
w = NewWriter(&buf, false)
if err := w.Write([]string{"c", "d"}); err == nil {
t.Fatal("gave nil error; want error")
}
w.SkipWriteFields()
if err := w.Write([]string{"c", "d"}); err != nil {
t.Fatal(err)
}
w.Flush()
if result, r := "A,B\na,b\nc,d\n", buf.String(); r != result {
t.Errorf("expected %q; got %q", result, r)
}
}

func TestWriter(t *testing.T) {
result := `A|B
a|b
Expand Down

0 comments on commit deb39ce

Please sign in to comment.