返回 DeepSeek-Reasonix
atomic_json.go
根目录 / internal / checkpoint / atomic_json.go
1 package checkpoint
2
3 import (
4 "encoding/json"
5 "fmt"
6 "os"
7 "path/filepath"
8
9 "reasonix/internal/fileutil"
10 )
11
12 // writeJSONAtomic marshals v and publishes it via AtomicWriteFileStrict.
13 func writeJSONAtomic(path string, v any) error {
14 b, err := json.MarshalIndent(v, "", " ")
15 if err != nil {
16 return err
17 }
18 if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil {
19 return err
20 }
21 return fileutil.AtomicWriteFileStrict(path, b, 0o644)
22 }
23
24 // readJSONFile unmarshals path into v.
25 func readJSONFile(path string, v any) error {
26 b, err := os.ReadFile(path)
27 if err != nil {
28 return err
29 }
30 if err := json.Unmarshal(b, v); err != nil {
31 return fmt.Errorf("decode %s: %w", filepath.Base(path), err)
32 }
33 return nil
34 }
35
35 lines GO