72 lines
2.2 KiB
Go
72 lines
2.2 KiB
Go
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)
|
|
}
|