Lines n/a 0 / 0
Functions and Methods n/a 0 / 0
Classes and Traits n/a 0 / 0
Name Lines Functions and Methods CRAP Classes and Traits
1<?php
2
3declare(strict_types=1);
4
5namespace Stewart\Contracts\Schedule;
6
7use Closure;
8use DateTimeImmutable;
9use Stewart\Contracts\Entity\EntityId;
10use Stewart\Contracts\Exception\IdentifierException;
11use Stewart\Contracts\Exception\ScheduleException;
12use Stewart\Contracts\Sun\SunEvent;
13use Stewart\Contracts\Time\Duration;
14use Stewart\Contracts\Time\SunOffset;
15
16interface Scheduler
17{
18    /** @param Closure(ScheduledRun): void $handler */
19    public function runEvery(Duration $period, Closure $handler): ScheduledTask;
20
21    /**
22     * @param Closure(ScheduledRun): void $handler
23     * @throws ScheduleException
24     */
25    public function runDailyAt(TimeOfDay|string $time, Closure $handler, DayOfWeek ...$onlyOn): ScheduledTask;
26
27    /**
28     * @param Closure(ScheduledRun): void $handler
29     * @throws ScheduleException
30     */
31    public function runOnCron(string $expression, Closure $handler): ScheduledTask;
32
33    /** @param Closure(ScheduledRun): void $handler */
34    public function runAfter(Duration $delay, Closure $handler): ScheduledTask;
35
36    /** @param Closure(ScheduledRun): void $handler */
37    public function runAt(DateTimeImmutable $moment, Closure $handler): ScheduledTask;
38
39    /**
40     * @param Closure(ScheduledRun): void $handler
41     * @throws ScheduleException|IdentifierException
42     */
43    public function runAtEntityTime(EntityId|string $entity, Closure $handler): ScheduledTask;
44
45    /**
46     * @param Closure(ScheduledRun): void $handler
47     * @throws ScheduleException
48     */
49    public function runAtSunEvent(SunEvent $event, Closure $handler, ?SunOffset $offset = null): ScheduledTask;
50}