48 lines
1.4 KiB
Go
48 lines
1.4 KiB
Go
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
|
|
}
|