Switch CLI configuration to ConfigKit
This commit is contained in:
71
internal/adapter/cli/application_config.go
Normal file
71
internal/adapter/cli/application_config.go
Normal file
@@ -0,0 +1,71 @@
|
||||
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 string, explicit bool, overrides []configkit.Override) (appconfig.AppSettings, []configkit.Diagnostic, error) {
|
||||
result, err := appconfig.Load(appconfig.LoadOptions{
|
||||
Path: configPath, 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)
|
||||
}
|
||||
Reference in New Issue
Block a user