Separate comparison side selectors

This commit is contained in:
2026-11-07 04:36:05 +00:00
parent da120c2dd4
commit 85ae55bf42
15 changed files with 169 additions and 99 deletions

View File

@@ -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]