return err
}
if fulltext {
- if err := x.fset.Write(w); err != nil {
+ encode := func(x interface{}) error {
+ return gob.NewEncoder(w).Encode(x)
+ }
+ if err := x.fset.Write(encode); err != nil {
return err
}
if err := x.suffixes.Write(w); err != nil {
return err
}
x.suffixes = new(suffixarray.Index)
- if err := x.suffixes.Read(r); err != nil {
+ decode := func(x interface{}) error {
+ return gob.NewDecoder(r).Decode(x)
+ }
+ if err := x.suffixes.Read(decode); err != nil {
return err
}
}
package token
-import (
- "encoding/gob"
- "io"
-)
-
type serializedFile struct {
// fields correspond 1:1 to fields with same (lower-case) name in File
Name string
Files []serializedFile
}
-func (s *serializedFileSet) Read(r io.Reader) error {
- return gob.NewDecoder(r).Decode(s)
-}
-
-func (s *serializedFileSet) Write(w io.Writer) error {
- return gob.NewEncoder(w).Encode(s)
-}
-
-// Read reads the fileset from r into s; s must not be nil.
-// If r does not also implement io.ByteReader, it will be wrapped in a bufio.Reader.
-func (s *FileSet) Read(r io.Reader) error {
+// Read calls decode to deserialize a file set into s; s must not be nil.
+func (s *FileSet) Read(decode func(interface{}) error) error {
var ss serializedFileSet
- if err := ss.Read(r); err != nil {
+ if err := decode(&ss); err != nil {
return err
}
return nil
}
-// Write writes the fileset s to w.
-func (s *FileSet) Write(w io.Writer) error {
+// Write calls encode to serialize the file set s.
+func (s *FileSet) Write(encode func(interface{}) error) error {
var ss serializedFileSet
s.mutex.Lock()
ss.Files = files
s.mutex.Unlock()
- return ss.Write(w)
+ return encode(ss)
}
import (
"bytes"
+ "encoding/gob"
"fmt"
"testing"
)
func checkSerialize(t *testing.T, p *FileSet) {
var buf bytes.Buffer
- if err := p.Write(&buf); err != nil {
+ encode := func(x interface{}) error {
+ return gob.NewEncoder(&buf).Encode(x)
+ }
+ if err := p.Write(encode); err != nil {
t.Errorf("writing fileset failed: %s", err)
return
}
q := NewFileSet()
- if err := q.Read(&buf); err != nil {
+ decode := func(x interface{}) error {
+ return gob.NewDecoder(&buf).Decode(x)
+ }
+ if err := q.Read(decode); err != nil {
t.Errorf("reading fileset failed: %s", err)
return
}