// Save persists a Siegfried struct to disk (path) func (s *Siegfried) Save(path string) error { ls := persist.NewLoadSaver(nil) ls.SaveTime(s.C) namematcher.Save(s.nm, ls) mimematcher.Save(s.mm, ls) containermatcher.Save(s.cm, ls) xmlmatcher.Save(s.xm, ls) riffmatcher.Save(s.rm, ls) bytematcher.Save(s.bm, ls) textmatcher.Save(s.tm, ls) ls.SaveTinyUInt(len(s.ids)) for _, i := range s.ids { i.Save(ls) } if ls.Err != nil { return ls.Err } f, err := os.Create(path) if err != nil { return err } defer f.Close() _, err = f.Write(append(config.Magic(), byte(config.Version()[0]), byte(config.Version()[1]))) if err != nil { return err } z, err := flate.NewWriter(f, 1) if err != nil { return err } _, err = z.Write(ls.Bytes()) z.Close() return err }
func saveCTests(ls *persist.LoadSaver, ct map[string]*cTest) { ls.SaveSmallInt(len(ct)) for k, v := range ct { ls.SaveString(k) ls.SaveInts(v.satisfied) ls.SaveInts(v.unsatisfied) bytematcher.Save(v.bm, ls) } }