Files
commandkit/integrations/ckconfig/operations.go

48 lines
1.4 KiB
Go
Raw Normal View History

2026-10-11 01:39:23 +00:00
package ckconfig
import (
"errors"
"fmt"
commandkit "gitea.maximumdirect.net/eric/CommandKit"
)
func runConfigOperation[I, S any](invocation commandkit.Invocation, operation Operation, input *configCommandInput[I, S]) commandkit.Outcome {
if input == nil || input.plan == nil {
return commandkit.Failure(errors.New("configuration operation was not prepared"))
}
if err := invocation.Context.Err(); err != nil {
return commandkit.Failure(err)
}
plan := input.plan
var state S
if plan.prepared.newState != nil {
state = plan.prepared.newState()
}
switch operation {
case Validate:
return runConfigValidation(invocation, plan, state)
case Show:
return runConfigShow(invocation, plan, state)
case Sources:
return runConfigSources(invocation, plan, state)
case Explain:
return runConfigExplanation(invocation, plan, state)
default:
return commandkit.Failure(fmt.Errorf("unsupported configuration operation %q", operation))
}
}
func configOperationFailure(cause error, diagnostics []commandkit.Diagnostic, reportStarted bool) commandkit.Outcome {
outcome := commandkit.Failure(cause)
outcome.Diagnostics = diagnostics
outcome.ReportIncomplete = reportStarted
return outcome
}
func configDeliveryFailure(cause error, diagnostics []commandkit.Diagnostic, reportStarted bool) commandkit.Outcome {
outcome := configOperationFailure(cause, diagnostics, reportStarted)
outcome.DeliveryError = cause
return outcome
}