]> Cypherpunks.ru repositories - gorecfile.git/blobdiff - r.go
Add NextMapWithSlice
[gorecfile.git] / r.go
diff --git a/r.go b/r.go
index 9a4420d7b6968f8649c44d9ec3481227adf6896c..71400f0f9a23eff4e6d1796a2ba1ad3683e827f3 100644 (file)
--- a/r.go
+++ b/r.go
@@ -38,11 +38,6 @@ func NewReader(r io.Reader) *Reader {
        return &Reader{bufio.NewScanner(r)}
 }
 
-type Field struct {
-       Name  string
-       Value string
-}
-
 // Get next record. Each record is just a collection of fields. io.EOF
 // is returned if there is nothing to read more.
 func (r *Reader) Next() ([]Field, error) {
@@ -128,3 +123,29 @@ func (r *Reader) Next() ([]Field, error) {
        }
        return fields, nil
 }
+
+// Same as Next(), but with unique keys and last value.
+func (r *Reader) NextMap() (map[string]string, error) {
+       fields, err := r.Next()
+       if err != nil {
+               return nil, err
+       }
+       m := make(map[string]string, len(fields))
+       for _, f := range fields {
+               m[f.Name] = f.Value
+       }
+       return m, nil
+}
+
+// Same as Next(), but with unique keys and slices of values.
+func (r *Reader) NextMapWithSlice() (map[string][]string, error) {
+       fields, err := r.Next()
+       if err != nil {
+               return nil, err
+       }
+       m := make(map[string][]string)
+       for _, f := range fields {
+               m[f.Name] = append(m[f.Name], f.Value)
+       }
+       return m, nil
+}