diff --git a/src/cmd/jsondebug/common/helpers.go b/src/cmd/jsondebug/common/helpers.go index f780540e0..8c27ffc2a 100644 --- a/src/cmd/jsondebug/common/helpers.go +++ b/src/cmd/jsondebug/common/helpers.go @@ -100,10 +100,19 @@ type DirectorySummary struct { IgnoredErrorCount int `json:"numIgnoredErrors,omitempty"` } +type Decoder interface { + ManifestDecoder + ByteManifestDecoder +} + type ManifestDecoder interface { Decode(r io.Reader, gcStats bool) error } +type ByteManifestDecoder interface { + DecodeBytes(data []byte, gcStats bool) error +} + func PrintMemUsage() { var m runtime.MemStats diff --git a/src/cmd/jsondebug/decoder/jsonparser_decode.go b/src/cmd/jsondebug/decoder/jsonparser_decode.go index 7971f1e86..954dcee39 100644 --- a/src/cmd/jsondebug/decoder/jsonparser_decode.go +++ b/src/cmd/jsondebug/decoder/jsonparser_decode.go @@ -32,6 +32,14 @@ func (d JsonParser) Decode(r io.Reader, gcStats bool) error { return parseManifestData(data, gcStats) } +func (d JsonParser) DecodeBytes(data []byte, gcStats bool) error { + if gcStats { + common.PrintMemUsage() + } + + return parseManifestData(data, gcStats) +} + func parseManifestData(data []byte, gcStats bool) error { if gcStats { common.PrintMemUsage() diff --git a/src/cmd/jsondebug/decoder/manifst_decoder.go b/src/cmd/jsondebug/decoder/manifst_decoder.go index 7dc4f4dc0..8ca33c462 100644 --- a/src/cmd/jsondebug/decoder/manifst_decoder.go +++ b/src/cmd/jsondebug/decoder/manifst_decoder.go @@ -1,6 +1,7 @@ package decoder import ( + "bytes" "encoding/json" "io" @@ -10,9 +11,12 @@ import ( ) var ( - _ common.ManifestDecoder = Array{} - _ common.ManifestDecoder = ArrayFull{} - _ common.ManifestDecoder = Map{} + _ common.ManifestDecoder = Array{} + _ common.ByteManifestDecoder = Array{} + _ common.ManifestDecoder = ArrayFull{} + _ common.ByteManifestDecoder = ArrayFull{} + _ common.ManifestDecoder = Map{} + _ common.ByteManifestDecoder = Map{} ) type Array struct{} @@ -22,6 +26,13 @@ func (d Array) Decode(r io.Reader, gcStats bool) error { return err } +func (d Array) DecodeBytes(data []byte, gcStats bool) error { + r := bytes.NewReader(data) + _, err := DecodeManifestArray(r) + + return err +} + func DecodeManifestArray(r io.Reader) (common.Manifest, error) { var ( dec = json.NewDecoder(r) @@ -78,6 +89,13 @@ func (d ArrayFull) Decode(r io.Reader, gcStats bool) error { return err } +func (d ArrayFull) DecodeBytes(data []byte, gcStats bool) error { + r := bytes.NewReader(data) + _, err := d.decodeManifestArray(r) + + return err +} + func (d ArrayFull) decodeManifestArray(r io.Reader) (common.Manifest, error) { var ( dec = json.NewDecoder(r) @@ -205,6 +223,13 @@ func (d Map) Decode(r io.Reader, gcStats bool) error { return err } +func (d Map) DecodeBytes(data []byte, gcStats bool) error { + r := bytes.NewReader(data) + _, err := d.decodeManifestArray(r) + + return err +} + func (d Map) decodeManifestArray(r io.Reader) (common.Manifest, error) { var ( dec = json.NewDecoder(r) diff --git a/src/cmd/jsondebug/decoder/stdlib_decode.go b/src/cmd/jsondebug/decoder/stdlib_decode.go index 01bef812f..ecf4b0690 100644 --- a/src/cmd/jsondebug/decoder/stdlib_decode.go +++ b/src/cmd/jsondebug/decoder/stdlib_decode.go @@ -1,6 +1,7 @@ package decoder import ( + "bytes" "encoding/json" "io" @@ -23,3 +24,15 @@ func (d Stdlib) Decode(r io.Reader, gcStats bool) error { return nil } + +func (d Stdlib) DecodeBytes(data []byte, gcStats bool) error { + r := bytes.NewReader(data) + dec := json.NewDecoder(r) + output := common.Manifest{} + + if err := dec.Decode(&output); err != nil { + return errors.Wrap(err, "decoding input") + } + + return nil +}