1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
use std::future::Future;
use wasm_bindgen::prelude::*;
use wasm_bindgen_futures::future_to_promise;
use worker_sys::{ScheduleContext as EdgeScheduleContext, ScheduledEvent as EdgeScheduledEvent};
#[derive(Debug, Clone)]
pub struct ScheduledEvent {
cron: String,
scheduled_time: f64,
ty: String,
}
impl From<EdgeScheduledEvent> for ScheduledEvent {
fn from(schedule: EdgeScheduledEvent) -> Self {
Self {
cron: schedule.cron(),
scheduled_time: schedule.scheduled_time(),
ty: String::from("scheduled"),
}
}
}
impl ScheduledEvent {
pub fn cron(&self) -> String {
self.cron.clone()
}
pub fn ty(&self) -> String {
self.ty.clone()
}
pub fn schedule(&self) -> f64 {
self.scheduled_time
}
}
#[derive(Clone)]
pub struct ScheduleContext {
edge: EdgeScheduleContext,
}
impl From<EdgeScheduleContext> for ScheduleContext {
fn from(edge: EdgeScheduleContext) -> Self {
Self { edge }
}
}
impl ScheduleContext {
pub fn wait_until<T>(&self, handler: T)
where
T: Future<Output = ()> + 'static,
{
self.edge.wait_until(future_to_promise(async {
handler.await;
Ok(JsValue::null())
}))
}
}