Pure time-window calculations for recipient-local orchestration decisions.
Summary
Types
@type option() :: {:time_zone, String.t()} | {:quiet_hours_start_minute, non_neg_integer()} | {:quiet_hours_end_minute, non_neg_integer()}
Functions
@spec next_eligible_at(DateTime.t(), [option()]) :: {:ok, DateTime.t()} | {:error, term()}