package app import ( "encoding/json" "os" "path/filepath" "time" ) func loadTransportPolicyState() TransportPolicyState { st := TransportPolicyState{Version: transportStateVersion, Revision: 0} data, err := os.ReadFile(transportPolicyStatePath) if err != nil { return st } if err := json.Unmarshal(data, &st); err != nil { return TransportPolicyState{Version: transportStateVersion, Revision: 0} } if st.Version == 0 { st.Version = transportStateVersion } if st.Intents == nil { st.Intents = nil } return st } func saveTransportPolicyState(st TransportPolicyState) error { st.Version = transportStateVersion st.UpdatedAt = time.Now().UTC().Format(time.RFC3339) data, err := json.MarshalIndent(st, "", " ") if err != nil { return err } if err := os.MkdirAll(filepath.Dir(transportPolicyStatePath), 0o755); err != nil { return err } tmp := transportPolicyStatePath + ".tmp" if err := os.WriteFile(tmp, data, 0o644); err != nil { return err } return os.Rename(tmp, transportPolicyStatePath) } func saveTransportPolicySnapshot(st TransportPolicyState) error { data, err := json.MarshalIndent(st, "", " ") if err != nil { return err } if err := os.MkdirAll(filepath.Dir(transportPolicySnapshotPath), 0o755); err != nil { return err } tmp := transportPolicySnapshotPath + ".tmp" if err := os.WriteFile(tmp, data, 0o644); err != nil { return err } return os.Rename(tmp, transportPolicySnapshotPath) } func loadTransportPolicySnapshot() (TransportPolicyState, bool) { data, err := os.ReadFile(transportPolicySnapshotPath) if err != nil { return TransportPolicyState{}, false } var st TransportPolicyState if err := json.Unmarshal(data, &st); err != nil { return TransportPolicyState{}, false } if st.Version == 0 { st.Version = transportStateVersion } return st, true }