func Dedup(d *types.Dat, deduper Deduper) (*types.Dat, error) { dc := new(types.Dat) dc.CopyHeader(d) for _, g := range d.Games { gc := new(types.Game) gc.CopyHeader(g) for _, r := range g.Roms { if !r.Valid() { continue } seen, err := deduper.Seen(r) if err != nil { return nil, err } if !seen { gc.Roms = append(gc.Roms, r) err = deduper.Declare(r) if err != nil { return nil, err } } } if len(gc.Roms) > 0 { dc.Games = append(dc.Games, gc) } } if len(dc.Games) > 0 { return dc, nil } return nil, nil }