diff options
| author | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 13:36:23 +0200 |
|---|---|---|
| committer | Jackson Moore <jacksonmoore@tuta.io> | 2026-09-04 13:36:23 +0200 |
| commit | 614eb6bd3f7059d297b4c940af5de154214091b3 (patch) | |
| tree | 3280e586797c96d8ed58caaa14e0cbe4bf090700 /lua/clever_f/sequence_coordinator.lua | |
| parent | 1ed91850daac2c4960e0bf316818de20341143fd (diff) | |
Acquire pressed primary targets
Diffstat (limited to 'lua/clever_f/sequence_coordinator.lua')
| -rw-r--r-- | lua/clever_f/sequence_coordinator.lua | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/lua/clever_f/sequence_coordinator.lua b/lua/clever_f/sequence_coordinator.lua index 334e058..d391eec 100644 --- a/lua/clever_f/sequence_coordinator.lua +++ b/lua/clever_f/sequence_coordinator.lua @@ -1,4 +1,6 @@ +local acquisition_service_factory = require("clever_f.acquisition_service") local domain = require("clever_f.domain") +local feedback_service_factory = require("clever_f.feedback_service") local policy = require("clever_f.policy") local repeat_resolver_factory = require("clever_f.repeat_resolver") local sequence_state = require("clever_f.sequence_state") @@ -59,6 +61,26 @@ function SequenceCoordinator.new(options) if type(resolver) ~= "table" or type(resolver.decide) ~= "function" then fail("SequenceCoordinator repeat resolver must provide decide", 2) end + local feedback = options.feedback + or options.feedback_service + or feedback_service_factory.new({ + host = host, + state = state, + transitions = transitions, + policy = policy_service, + }) + local acquisition = options.acquisition + or options.acquisition_service + or acquisition_service_factory.new({ + host = host, + state = state, + transitions = transitions, + policy = policy_service, + feedback = feedback, + }) + if type(acquisition) ~= "table" or type(acquisition.acquire) ~= "function" then + fail("SequenceCoordinator acquisition service must provide acquire", 2) + end local coordinator = setmetatable({}, SequenceCoordinator) coordinator_records[coordinator] = { @@ -67,6 +89,8 @@ function SequenceCoordinator.new(options) transitions = transitions, policy = policy_service, repeat_resolver = resolver, + feedback = feedback, + acquisition = acquisition, } return coordinator end @@ -166,6 +190,20 @@ function SequenceCoordinator:decide_primary(invocation) ) end +function SequenceCoordinator:acquire_primary(descriptor, invocation) + descriptor = self:validate_primary_descriptor(descriptor) + if type(invocation) ~= "table" then + fail("primary acquisition requires invocation state", 2) + end + return coordinator_records[self].acquisition:acquire( + descriptor, + invocation.context, + invocation.position, + invocation.count, + invocation.macro_state + ) +end + function SequenceCoordinator:primary(value) local descriptor = self:validate_primary_descriptor(value) local invocation = self:read_primary_invocation() @@ -175,6 +213,9 @@ function SequenceCoordinator:primary(value) invocation.fold_state ) invocation.repeat_decision = self:decide_primary(invocation) + if invocation.repeat_decision == repeat_resolver_factory.Decision.ACQUIRE then + return self:acquire_primary(descriptor, invocation) + end return descriptor end |
