Unify typed binding preparation

This commit is contained in:
2026-10-11 01:18:07 +00:00
parent de9bfdcc4c
commit f63b096525
5 changed files with 130 additions and 65 deletions

View File

@@ -9,11 +9,12 @@ type registryInput struct{ value string }
func TestCapturedDeclarationsRetainCallbacksWithoutCallingThem(t *testing.T) {
var factoryCalls, prepareCalls, setterCalls, checkCalls, runCalls int
identity := newBindingIdentity()
flag := Flag[registryInput]{binding: flagBinding[registryInput]{
meta: FlagMeta{Name: "mode"}, valid: true,
prepare: func([]string) (func(*registryInput), error) {
identity: identity, meta: FlagMeta{Name: "mode"}, valid: true,
prepare: func([]string) (preparedValue[registryInput], error) {
prepareCalls++
return func(*registryInput) { setterCalls++ }, nil
return preparedValue[registryInput]{identity: identity, apply: func(*registryInput) { setterCalls++ }}, nil
},
}}
command := NewCommand(CommandSpec[registryInput]{
@@ -175,7 +176,10 @@ func TestNewRejectsEmptyIdentity(t *testing.T) {
}
func TestNewCommandCopiesBindingMetadata(t *testing.T) {
flags := []Flag[registryInput]{{binding: flagBinding[registryInput]{meta: FlagMeta{Name: "mode"}, valid: true, prepare: func([]string) (func(*registryInput), error) { return func(*registryInput) {}, nil }}}}
identity := newBindingIdentity()
flags := []Flag[registryInput]{{binding: flagBinding[registryInput]{identity: identity, meta: FlagMeta{Name: "mode"}, valid: true, prepare: func([]string) (preparedValue[registryInput], error) {
return preparedValue[registryInput]{identity: identity, apply: func(*registryInput) {}}, nil
}}}}
command := NewCommand(CommandSpec[registryInput]{Name: "run", Flags: flags})
flags[0].binding.meta.Name = "changed"
payload := command.record.payload.(typedCommand[registryInput])