Commit Diff


commit - 33d9e23c99af8e8c059dd587cf9ee8d61734d300
commit + ccfca0aabb4388eed90e53cb4bad4798a81e6458
blob - d986c6ded9e2e83b290615711c1b70716666633d
blob + 2e1e5b17a04d83eb4ef1c34ee947ca5f6ffb3fd6
--- atom/atom.go
+++ atom/atom.go
@@ -4,6 +4,7 @@ package atom
 
 import (
 	"encoding/xml"
+	"io"
 	"time"
 )
 
@@ -57,6 +58,12 @@ func Marshal(f *Feed) ([]byte, error) {
 		Feed:      f,
 	}
 	return xml.MarshalIndent(f1, "", "\t")
-	// b = bytes.ReplaceAll(b, []byte("></link>"), []byte("/>"))
-	// return b, err
 }
+
+func Decode(r io.Reader) (*Feed, error) {
+	var f feed
+	if err := xml.NewDecoder(r).Decode(&f); err != nil {
+		return nil, err
+	}
+	return f.Feed, nil
+}
blob - 5e54cfd439080b97125d2e85958079a61f1726f9
blob + 937ab0135205a249d8a811a8741ce8659474c091
--- atom/atom_test.go
+++ atom/atom_test.go
@@ -5,6 +5,7 @@ import (
 	"encoding/xml"
 	"fmt"
 	"os"
+	"path/filepath"
 	"testing"
 	"time"
 )
@@ -50,3 +51,20 @@ func TestMarshal(t *testing.T) {
 		fmt.Fprintln(os.Stderr, string(got))
 	}
 }
+
+func TestDecode(t *testing.T) {
+	names, err := filepath.Glob("testdata/*.xml")
+	if err != nil {
+		t.Fatal(err)
+	}
+	for _, name := range names {
+		f, err := os.Open(name)
+		if err != nil {
+			t.Fatal(err)
+		}
+		if _, err := Decode(f); err != nil {
+			t.Errorf("decode %s: %v", name, err)
+		}
+		f.Close()
+	}
+}