package app import ( "encoding/json" "os" "path/filepath" "time" ) func loadTransportInterfacesState() transportInterfacesState { st := transportInterfacesState{Version: transportStateVersion} data, err := os.ReadFile(transportInterfacesStatePath) if err != nil { norm, _ := normalizeTransportInterfacesState(st, nil) _ = saveTransportInterfacesState(norm) return norm } if err := json.Unmarshal(data, &st); err != nil { st = transportInterfacesState{Version: transportStateVersion} } if st.Version == 0 { st.Version = transportStateVersion } if st.Items == nil { st.Items = nil } norm, changed := normalizeTransportInterfacesState(st, nil) if changed { _ = saveTransportInterfacesState(norm) } return norm } func saveTransportInterfacesState(st transportInterfacesState) error { norm, _ := normalizeTransportInterfacesState(st, nil) st = norm 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(transportInterfacesStatePath), 0o755); err != nil { return err } tmp := transportInterfacesStatePath + ".tmp" if err := os.WriteFile(tmp, data, 0o644); err != nil { return err } return os.Rename(tmp, transportInterfacesStatePath) }