summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua')
-rw-r--r--lua/clever_f/repeat_resolver.lua19
1 files changed, 18 insertions, 1 deletions
diff --git a/lua/clever_f/repeat_resolver.lua b/lua/clever_f/repeat_resolver.lua
index 4155df9..5368c49 100644
--- a/lua/clever_f/repeat_resolver.lua
+++ b/lua/clever_f/repeat_resolver.lua
@@ -1,5 +1,6 @@
local domain = require("clever_f.domain")
local sequence_state = require("clever_f.sequence_state")
+local state_transitions = require("clever_f.state_transitions")
local M = {}
local RepeatResolver = {}
@@ -43,6 +44,16 @@ local function require_clock(clock)
return clock
end
+local function require_transitions(transitions, state)
+ transitions = transitions or state_transitions.new(state)
+ if type(transitions) ~= "table"
+ or type(transitions.SetRepeatTimestamp) ~= "function"
+ then
+ fail("RepeatResolver transitions must set repeat timestamp", 3)
+ end
+ return transitions
+end
+
local function finite_time(value)
return type(value) == "number"
and value == value
@@ -93,6 +104,10 @@ function RepeatResolver.new(options)
clock = require_clock(options.clock or options.time_provider or options.host),
policy = require_policy(options.policy or options.policy_service),
state = state,
+ transitions = require_transitions(
+ options.transitions or options.state_transitions,
+ state
+ ),
}
return resolver
end
@@ -150,7 +165,9 @@ function RepeatResolver:evaluate_timeout()
if not finite_time(current_time) then
fail("repeat clock must return finite milliseconds", 2)
end
- local elapsed_ms = current_time - resolver_records[self].state.repeat_timestamp_ms
+ local record = resolver_records[self]
+ local elapsed_ms = current_time - record.state.repeat_timestamp_ms
+ record.transitions:SetRepeatTimestamp(current_time)
return nil, M.truncate_elapsed_ms(elapsed_ms)
end