func build(g index.Group, key index.Key) group { h := group{ Name: g.Name(), Key: key, TotalTime: g.Field("TotalTime"), Artist: g.Field("Artist"), AlbumArtist: g.Field("AlbumArtist"), Composer: g.Field("Composer"), Year: g.Field("Year"), BitRate: g.Field("BitRate"), DiscNumber: g.Field("DiscNumber"), ListStyle: g.Field("ListStyle"), TrackID: g.Field("TrackID"), } if c, ok := g.(index.Collection); ok { return buildCollection(h, c) } getString := func(t index.Track, field string) string { if g.Field(field) != nil { return "" } return t.GetString(field) } getInt := func(t index.Track, field string) int { if g.Field(field) != nil { return 0 } return t.GetInt(field) } for _, t := range g.Tracks() { h.Tracks = append(h.Tracks, track{ TrackID: t.GetString("TrackID"), Name: t.GetString("Name"), TotalTime: t.GetInt("TotalTime"), // Potentially common fields (don't want to re-transmit everything) Album: getString(t, "Album"), Artist: getString(t, "Artist"), AlbumArtist: getString(t, "AlbumArtist"), Composer: getString(t, "Composer"), Year: getInt(t, "Year"), DiscNumber: getInt(t, "DiscNumber"), BitRate: getInt(t, "BitRate"), }) } return h }