package qmc import ( "bytes" "errors" "os/exec" "git.um-react.app/um/cli/algo/common" "go.uber.org/zap" ) func LoadMMKVOrDefault(opts MMKVLoaderOptions, logger *zap.Logger) (result common.QMCKeys, err error) { cliExe := opts.CliExe if cliExe == "" { cliExe = "qmpc-mmkv-cli.exe" } cmd := exec.Command(cliExe, "-f", "plaintext", "-o", "-") var stdout, stderr bytes.Buffer cmd.Stdout = &stdout cmd.Stderr = &stderr err = cmd.Run() if err != nil { var exitErr *exec.ExitError if errors.As(err, &exitErr) { logger.Warn("LoadMMKVOrDefault: qmpc-mmkv-cli exited with non-zero status", zap.String("exe", cliExe), zap.Int("exit_code", exitErr.ExitCode()), zap.String("stderr", stderr.String()), ) } else { logger.Warn("LoadMMKVOrDefault: failed to run qmpc-mmkv-cli", zap.String("exe", cliExe), zap.Error(err), zap.String("stderr", stderr.String()), ) } return nil, nil } result = parseQmpcMMKVCliOutput(&stdout, logger) logger.Debug("Keys loaded from qmpc-mmkv-cli", zap.Int("len", len(result))) return result, nil }