From dc0208ace3f6b22d70ffc54092feec2ea83c7e20 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Mon, 17 Nov 2025 08:03:25 +0100 Subject: pkg/osutil: add Read/ParseJSON functions --- pkg/osutil/osutil.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'pkg/osutil/osutil.go') diff --git a/pkg/osutil/osutil.go b/pkg/osutil/osutil.go index 1379e8c23..936465ee7 100644 --- a/pkg/osutil/osutil.go +++ b/pkg/osutil/osutil.go @@ -268,6 +268,25 @@ func WriteJSON[T any](filename string, obj T) error { return WriteFile(filename, jsonData) } +func ReadJSON[T any](filename string) (T, error) { + data, err := os.ReadFile(filename) + if err != nil { + var v T + return v, err + } + return ParseJSON[T](data) +} + +func ParseJSON[T any](data []byte) (T, error) { + dec := json.NewDecoder(bytes.NewReader(data)) + dec.DisallowUnknownFields() + var v T + if err := dec.Decode(&v); err != nil { + return v, fmt.Errorf("failed to unmarshal %T: %w", v, err) + } + return v, nil +} + func WriteGzipStream(filename string, reader io.Reader) error { f, err := os.Create(filename) if err != nil { -- cgit mrf-deployment