commit 848b29c4c69a1837ec426676170747fd0d830885 from: Oliver Lowe date: Sun Apr 13 06:09:18 2025 UTC atom: implement feed decoding Terrible test but hopefully enough for a sanity check in these (very!) early stages! commit - 33d9e23c99af8e8c059dd587cf9ee8d61734d300 commit + 848b29c4c69a1837ec426676170747fd0d830885 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(">"), []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() + } +}