Separate comparison side selectors
This commit is contained in:
@@ -76,6 +76,17 @@ func CaptureFlags[Outer, I any](flags []Flag[I], target func(*Outer) *FlagValues
|
||||
// occurrence values in command-line order. Repeated core-owned values are copied
|
||||
// for each application.
|
||||
func (values FlagValues[I]) ApplyTo(target *I, selected ...Flag[I]) error {
|
||||
return values.applyTo(target, false, selected...)
|
||||
}
|
||||
|
||||
// ApplySuppliedTo applies only explicitly supplied selected flags, preserving
|
||||
// the destination's existing values for omitted flags. It checks selected
|
||||
// bindings and required values like ApplyTo and preserves occurrence order.
|
||||
func (values FlagValues[I]) ApplySuppliedTo(target *I, selected ...Flag[I]) error {
|
||||
return values.applyTo(target, true, selected...)
|
||||
}
|
||||
|
||||
func (values FlagValues[I]) applyTo(target *I, suppliedOnly bool, selected ...Flag[I]) error {
|
||||
if target == nil {
|
||||
return fmt.Errorf("%w: destination is nil", ErrFlagWiring)
|
||||
}
|
||||
@@ -92,6 +103,9 @@ func (values FlagValues[I]) ApplyTo(target *I, selected ...Flag[I]) error {
|
||||
if binding.meta.Required && !prepared.supplied {
|
||||
return fmt.Errorf("flag --%s: %w", binding.meta.Name, ErrFlagInput)
|
||||
}
|
||||
if suppliedOnly && !prepared.supplied {
|
||||
continue
|
||||
}
|
||||
preparedValues = append(preparedValues, prepared)
|
||||
}
|
||||
var ordered []preparedOccurrence[I]
|
||||
|
||||
Reference in New Issue
Block a user