From 13b65d51ffc9768464e8330fdb73b6febd7410af Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Sat, 30 Jul 2022 02:36:25 -0600 Subject: json: Implement a bunch of streaming JSON encoding/decoding --- lib/btrfs/btrfsitem/item_extentcsum.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'lib/btrfs/btrfsitem') diff --git a/lib/btrfs/btrfsitem/item_extentcsum.go b/lib/btrfs/btrfsitem/item_extentcsum.go index b35d333..eedd044 100644 --- a/lib/btrfs/btrfsitem/item_extentcsum.go +++ b/lib/btrfs/btrfsitem/item_extentcsum.go @@ -5,7 +5,11 @@ package btrfsitem import ( + "encoding/hex" "fmt" + "io" + + "git.lukeshu.com/go/lowmemjson" "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfssum" ) @@ -43,3 +47,33 @@ func (o ExtentCSum) MarshalBinary() ([]byte, error) { } return dat, nil } + +var ( + _ lowmemjson.Encodable = ExtentCSum{} +) + +func (o ExtentCSum) EncodeJSON(w io.Writer) error { + if _, err := fmt.Fprintf(w, `{"ChecksumSize":%d,"Sums":[`, o.ChecksumSize); err != nil { + return err + } + for i, sum := range o.Sums { + if i > 0 { + if _, err := w.Write([]byte(",")); err != nil { + return err + } + } + if _, err := w.Write([]byte(`"`)); err != nil { + return err + } + if _, err := hex.NewEncoder(w).Write(sum[:o.ChecksumSize]); err != nil { + return err + } + if _, err := w.Write([]byte(`"`)); err != nil { + return err + } + } + if _, err := w.Write([]byte(`]}`)); err != nil { + return err + } + return nil +} -- cgit v1.2.3-54-g00ecf