From 22c7da1ed162ee7779deded91de7e5c8ff2c9ba6 Mon Sep 17 00:00:00 2001 From: "Sascha L. Teichmann" Date: Thu, 2 Dec 2021 00:24:27 +0100 Subject: [PATCH] use io.WriterTo instead of custom save interface ti serialize metadata and rolie. --- cmd/csaf_provider/files.go | 8 ++------ cmd/csaf_provider/transaction.go | 2 +- csaf/models.go | 19 ++++++++++++++++--- csaf/rolie.go | 8 +++++--- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/cmd/csaf_provider/files.go b/cmd/csaf_provider/files.go index 3fb5454..50ba98f 100644 --- a/cmd/csaf_provider/files.go +++ b/cmd/csaf_provider/files.go @@ -138,16 +138,12 @@ func writeHashedFile(fname, name string, data []byte, armored string) error { return nil } -type saver interface { - Save(io.Writer) error -} - -func saveToFile(fname string, s saver) error { +func saveToFile(fname string, wt io.WriterTo) error { f, err1 := os.Create(fname) if err1 != nil { return err1 } - err1 = s.Save(f) + _, err1 = wt.WriteTo(f) err2 := f.Close() if err1 != nil { return err1 diff --git a/cmd/csaf_provider/transaction.go b/cmd/csaf_provider/transaction.go index 2d0c782..04f4d45 100644 --- a/cmd/csaf_provider/transaction.go +++ b/cmd/csaf_provider/transaction.go @@ -67,7 +67,7 @@ func doTransaction( return err } - if err := pmd.Save(newMetaFile); err != nil { + if _, err := pmd.WriteTo(newMetaFile); err != nil { newMetaFile.Close() os.Remove(newMetaName) os.RemoveAll(newDir) diff --git a/csaf/models.go b/csaf/models.go index b511cf6..dcdbcf2 100644 --- a/csaf/models.go +++ b/csaf/models.go @@ -420,11 +420,24 @@ func NewProviderMetadataDomain(domain string, tlps []TLPLabel) *ProviderMetadata return pm } -// Save saves a metadata provider to a writer. -func (pmd *ProviderMetadata) Save(w io.Writer) error { +type nWriter struct { + io.Writer + n int64 +} + +func (nw *nWriter) Write(p []byte) (int, error) { + n, err := nw.Write(p) + nw.n += int64(n) + return n, err +} + +// WriteTo saves a metadata provider to a writer. +func (pmd *ProviderMetadata) WriteTo(w io.Writer) (int64, error) { enc := json.NewEncoder(w) enc.SetIndent("", " ") - return enc.Encode(pmd) + nw := nWriter{w, 0} + err := enc.Encode(&nw) + return nw.n, err } // LoadProviderMetadata loads a metadata provider from a reader. diff --git a/csaf/rolie.go b/csaf/rolie.go index e49641f..78d8c63 100644 --- a/csaf/rolie.go +++ b/csaf/rolie.go @@ -68,11 +68,13 @@ func LoadROLIEFeed(r io.Reader) (*ROLIEFeed, error) { return &rf, nil } -// Save saves a ROLIE feed to a writer. -func (rf *ROLIEFeed) Save(w io.Writer) error { +// WriteTo saves a ROLIE feed to a writer. +func (rf *ROLIEFeed) WriteTo(w io.Writer) (int64, error) { enc := json.NewEncoder(w) enc.SetIndent("", " ") - return enc.Encode(rf) + nw := nWriter{w, 0} + err := enc.Encode(&nw) + return nw.n, err } // EntryByID looks up an entry by its ID.