diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2025-11-17 08:03:25 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2025-11-17 08:54:02 +0000 |
| commit | dc0208ace3f6b22d70ffc54092feec2ea83c7e20 (patch) | |
| tree | ebddae7184cc0df43db3a363729863aac0cc5dc6 /pkg/osutil/osutil.go | |
| parent | f7988ea4935e2627f33bc73cf235f2c1942dce76 (diff) | |
pkg/osutil: add Read/ParseJSON functions
Diffstat (limited to 'pkg/osutil/osutil.go')
| -rw-r--r-- | pkg/osutil/osutil.go | 19 |
1 files changed, 19 insertions, 0 deletions
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 { |
