]> Cypherpunks repositories - gorecfile.git/commitdiff
Safer multiline strings
authorSergey Matveev <stargrave@stargrave.org>
Fri, 11 Jul 2025 09:43:52 +0000 (12:43 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Fri, 11 Jul 2025 09:48:31 +0000 (12:48 +0300)
cmd/gorecsel/main.go
field.go
go.mod
r.go
slog/handler.go
slog/handler_test.go
w.go

index 22662921f0f3a8a626014768c88e7dc1a1ea7094..c5a16fd2d8dd27af84b500d878370934f2884980 100644 (file)
@@ -5,7 +5,7 @@ import (
        "io"
        "os"
 
-       "go.cypherpunks.su/recfile/v2"
+       "go.cypherpunks.su/recfile/v3"
 )
 
 func main() {
@@ -24,7 +24,7 @@ func main() {
                }
                fmt.Println("Record:", n)
                for _, field := range fields {
-                       fmt.Printf("%s: %s\n", field.Name, field.Value)
+                       fmt.Printf("%s: %s\n", field.F, field.V)
                }
                n++
        }
index 1009ed10c5ed337c197905e8cfd1199311e34f3d..57369d0e26b0e42fe275e4644e54695b3af42eee 100644 (file)
--- a/field.go
+++ b/field.go
@@ -17,6 +17,6 @@
 package recfile
 
 type Field struct {
-       Name  string
-       Value string
+       F string
+       V string
 }
diff --git a/go.mod b/go.mod
index 848fe24102df161b27fbad729222df2a8281f66b..c0b0cab2b6902a70be8fee04a1d1129e747dfc0f 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -1,3 +1,3 @@
-module go.cypherpunks.su/recfile/v2
+module go.cypherpunks.su/recfile/v3
 
-go 1.21
+go 1.24
diff --git a/r.go b/r.go
index fd93669082d7b8ad7d1ead07fc8bf884cd6cc01c..4f88447570054a21d8504818d47f680e018864e8 100644 (file)
--- a/r.go
+++ b/r.go
@@ -151,7 +151,7 @@ func (r *Reader) NextMap() (map[string]string, error) {
        }
        m := make(map[string]string, len(fields))
        for _, f := range fields {
-               m[f.Name] = f.Value
+               m[f.F] = f.V
        }
        return m, nil
 }
@@ -164,7 +164,7 @@ func (r *Reader) NextMapWithSlice() (map[string][]string, error) {
        }
        m := make(map[string][]string)
        for _, f := range fields {
-               m[f.Name] = append(m[f.Name], f.Value)
+               m[f.F] = append(m[f.F], f.V)
        }
        return m, nil
 }
index 8cee4a2fa7d691937bd5ce081ddf12dde503d79f..900b20326aa7801cdfc45cdbb41328f097ccfd70 100644 (file)
@@ -23,7 +23,7 @@ import (
        "sync"
        "time"
 
-       "go.cypherpunks.su/recfile/v2"
+       "go.cypherpunks.su/recfile/v3"
 )
 
 type RecfileHandler struct {
@@ -88,15 +88,15 @@ func writeValue(w *recfile.Writer, group string, attr slog.Attr) (err error) {
                multiline, ok := attr.Value.Any().([]string)
                if ok {
                        if len(multiline) > 0 {
-                               _, err = w.WriteFieldMultiline(group+attr.Key, multiline)
+                               _, err = w.WriteField(group+attr.Key, multiline)
                                return
                        }
                        return
                }
        }
        _, err = w.WriteFields(recfile.Field{
-               Name:  group + attr.Key,
-               Value: attr.Value.String(),
+               F: group + attr.Key,
+               V: attr.Value.String(),
        })
        return
 }
@@ -111,17 +111,17 @@ func (h *RecfileHandler) Handle(ctx context.Context, rec slog.Record) (err error
        var fields []recfile.Field
        if h.LevelKey != "" {
                fields = append(fields, recfile.Field{
-                       Name:  h.LevelKey,
-                       Value: rec.Level.String(),
+                       F: h.LevelKey,
+                       V: rec.Level.String(),
                })
        }
        if h.TimeKey != "" {
                fields = append(fields, recfile.Field{
-                       Name:  h.TimeKey,
-                       Value: rec.Time.UTC().Format(time.RFC3339Nano),
+                       F: h.TimeKey,
+                       V: rec.Time.UTC().Format(time.RFC3339Nano),
                })
        }
-       fields = append(fields, recfile.Field{Name: h.MsgKey, Value: rec.Message})
+       fields = append(fields, recfile.Field{F: h.MsgKey, V: rec.Message})
        _, err = w.WriteFields(fields...)
        if err != nil {
                return
index a90365d379e02ee9efdd1c70838cf0fbd5f317e9..013dd8f0d4cf4279ea7aa5312531bbcdcf428f55 100644 (file)
@@ -22,7 +22,7 @@ import (
        "testing"
        "time"
 
-       "go.cypherpunks.su/recfile/v2"
+       "go.cypherpunks.su/recfile/v3"
 )
 
 func TestBasic(t *testing.T) {
diff --git a/w.go b/w.go
index 6b447f2fcb604173f5a89cde470be820008094ab..15db009e74a4d349b12f4322f448ce6cbcc44f4e 100644 (file)
--- a/w.go
+++ b/w.go
@@ -38,9 +38,7 @@ func backslashSpace(s string) string {
 func (w *Writer) WriteFields(fs ...Field) (written int, err error) {
        var n int
        for _, f := range fs {
-               n, err = w.w.WriteString(
-                       f.Name + ": " + backslashSpace(strings.TrimLeft(f.Value, " ")) + "\n",
-               )
+               n, err = w.WriteField(f.F, strings.Split(f.V, "\n"))
                written += n
                if err != nil {
                        return
@@ -49,7 +47,7 @@ func (w *Writer) WriteFields(fs ...Field) (written int, err error) {
        return
 }
 
-func (w *Writer) WriteFieldMultiline(name string, lines []string) (written int, err error) {
+func (w *Writer) WriteField(name string, lines []string) (written int, err error) {
        var n int
        n, err = w.w.WriteString(
                name + ": " + backslashSpace(strings.TrimLeft(lines[0], " ")) + "\n",