package cli import ( "errors" "flag" "fmt" "io" configkit "gitea.maximumdirect.net/eric/ConfigKit" appconfig "gitea.maximumdirect.net/eric/scriptorium/internal/config" ) // applicationOverrides keeps explicit application flags separate from invocation state. func applicationOverrides(fs *flag.FlagSet) []configkit.Override { var overrides []configkit.Override fs.Visit(func(selected *flag.Flag) { var path configkit.Path switch selected.Name { case "prompt-dir": path = configkit.Keys("prompt_dir") case "profile-dir": path = configkit.Keys("profile_dir") case "schema-dir": path = configkit.Keys("schema_dir") case "addr": path = configkit.Keys("server", "addr") case "artifact-root": path = configkit.Keys("server", "artifact_root") case "max-request-bytes": path = configkit.Keys("server", "max_request_bytes") case "max-artifact-bytes": path = configkit.Keys("server", "max_artifact_bytes") case "max-response-bytes": path = configkit.Keys("server", "max_response_bytes") default: return } overrides = append(overrides, configkit.Override{ Path: path, Value: selected.Value.(flag.Getter).Get(), Flag: "--" + selected.Name, }) }) return overrides } func loadApplicationSettings(configPath, overlay string, explicit bool, overrides []configkit.Override) (appconfig.AppSettings, []configkit.Diagnostic, error) { result, err := appconfig.Load(appconfig.LoadOptions{ Path: configPath, Overlay: overlay, Explicit: explicit, Overrides: overrides, }) if err != nil { return appconfig.AppSettings{}, nil, err } return appconfig.Settings(result.Config), result.Diagnostics(), nil } func writeApplicationError(output io.Writer, label string, err error) { var loadError *configkit.LoadError if errors.As(err, &loadError) { if writeErr := configkit.WriteDiagnostics(output, loadError.Diagnostics()); writeErr != nil { _, _ = fmt.Fprintf(output, "%s diagnostic write error: %v\n", label, writeErr) } return } _, _ = fmt.Fprintf(output, "%s error: %v\n", label, err) } func writeApplicationWarnings(output io.Writer, diagnostics []configkit.Diagnostic) error { if len(diagnostics) == 0 { return nil } return configkit.WriteDiagnostics(output, diagnostics) }