// Package barefeed is an implementation of the barefeed message format for Go. // // https://git.sr.ht/~chrisppy/go-barefeed package barefeed import ( "fmt" "io" "git.sr.ht/~sircmpwn/go-bare" ) // FeedMap map of Linked type FeedMap map[string]Linked // Linked containing the linkage between a Feed and Entry type Linked struct { Feed Feed Entries map[string]Entry } // Read will open the provided reader and load it into the FeedEntry func (d FeedMap) Read(reader io.Reader) (err error) { var b Bin if err = bare.UnmarshalReader(reader, &b); err != nil { return } switch content := b.Content.(type) { case *Feed: l := Linked{ Feed: *content, Entries: make(map[string]Entry), } if v, ok := d[content.FeedID]; ok { l.Entries = v.Entries } d[content.FeedID] = l case *Entry: if _, ok := d[content.FeedID]; ok { d[content.FeedID].Entries[content.EntryID] = *content return } d[content.FeedID] = Linked{ Entries: map[string]Entry{ content.EntryID: *content, }, } default: err = fmt.Errorf("unknown type provided %+v", content) } return } // Write will output the Bin to the provided io writer func (d Bin) Write(writer io.Writer) error { w := bare.NewWriter(writer) return bare.MarshalWriter(w, &d) }