diff options
Diffstat (limited to 'lua/clever_f')
| -rw-r--r-- | lua/clever_f/repeat_resolver.lua | 19 |
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 |
