Add reusable PromptKit request flags
This commit is contained in:
@@ -5,14 +5,16 @@ import (
|
||||
"fmt"
|
||||
|
||||
commandkit "go.maximumdirect.net/commandkit"
|
||||
promptkit "go.maximumdirect.net/promptkit"
|
||||
)
|
||||
|
||||
type validationCommandInput[I any] struct {
|
||||
promptID string
|
||||
request ValidationRequest
|
||||
captured commandkit.FlagValues[I]
|
||||
selected I
|
||||
promptID string
|
||||
request ValidationRequest
|
||||
execution ExecutionInput
|
||||
resources ResourceInput
|
||||
inputs PromptInputs
|
||||
captured commandkit.FlagValues[I]
|
||||
selected I
|
||||
}
|
||||
|
||||
type requestValidationReport struct {
|
||||
@@ -36,32 +38,14 @@ func newValidationCommand[I, S any](suite Suite[I, S]) commandkit.Command {
|
||||
func(input **validationCommandInput[I], value commandkit.Supplied[string]) {
|
||||
(*input).request.Selection.Overlay = value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "profile", Usage: "Profile identity for validation."}, stringDefault(""), parseDefinitionString,
|
||||
func(input **validationCommandInput[I], value commandkit.Supplied[string]) {
|
||||
(*input).request.Request.ProfileID = value.Value
|
||||
}),
|
||||
commandkit.ValueFlag(commandkit.FlagMeta{Name: "session-id", Usage: "Session context for validation."}, stringDefault(""), parseDefinitionString,
|
||||
func(input **validationCommandInput[I], value commandkit.Supplied[string]) {
|
||||
(*input).request.Request.SessionID = value.Value
|
||||
}),
|
||||
commandkit.RepeatFlag(commandkit.FlagMeta{Name: "var", Usage: "Caller variable assignment KEY=VALUE."}, []variableAssignment(nil), parseVariableAssignment,
|
||||
func(input **validationCommandInput[I], value commandkit.Supplied[[]variableAssignment]) {
|
||||
variables := make(map[string]string, len(value.Value))
|
||||
for _, assignment := range value.Value {
|
||||
variables[assignment.key] = assignment.value
|
||||
}
|
||||
(*input).request.Request.Vars = variables
|
||||
}),
|
||||
commandkit.RepeatFlag(commandkit.FlagMeta{Name: "input", Usage: "Prompt input file assignment NAME=PATH."}, []inputAssignment(nil), parseInputAssignment,
|
||||
func(input **validationCommandInput[I], value commandkit.Supplied[[]inputAssignment]) {
|
||||
inputs := make(map[string]promptkit.ArtifactRef, len(value.Value))
|
||||
for _, assignment := range value.Value {
|
||||
inputs[assignment.name] = promptkit.File(assignment.path)
|
||||
}
|
||||
(*input).request.Request.Inputs = inputs
|
||||
}),
|
||||
)
|
||||
|
||||
resources := NewResourceFlags(func(input **validationCommandInput[I]) *ResourceInput { return &(*input).resources })
|
||||
execution := NewExecutionFlags(func(input **validationCommandInput[I]) *ExecutionInput { return &(*input).execution })
|
||||
inputs := NewPromptInputFlags(func(input **validationCommandInput[I]) *PromptInputs { return &(*input).inputs })
|
||||
flags = append(flags, resources.Profile, resources.SessionID, inputs.Variable, inputs.Text, inputs.File)
|
||||
flags = append(flags, execution.All()...)
|
||||
|
||||
return commandkit.NewCommand(commandkit.CommandSpec[*validationCommandInput[I]]{
|
||||
Name: "validate",
|
||||
Summary: "Validate a concrete PromptKit request without executing it.",
|
||||
@@ -80,6 +64,12 @@ func newValidationCommand[I, S any](suite Suite[I, S]) commandkit.Command {
|
||||
if input == nil {
|
||||
return errors.New("PromptKit validation input must not be nil")
|
||||
}
|
||||
input.request.Request.ProfileID = input.resources.Profile.Value
|
||||
input.request.Request.SessionID = input.resources.SessionID.Value
|
||||
input.request.Request.Vars = input.inputs.Vars
|
||||
input.request.Request.Inputs = input.inputs.Inputs
|
||||
input.request.Request.Execution = input.execution.Execution
|
||||
input.request.Request.TransientRetries = input.execution.TransientRetries
|
||||
selected, err := prepareSuiteInput(suite, input.request.Selection, input.captured)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
Reference in New Issue
Block a user