74 lines
1.4 KiB
V
74 lines
1.4 KiB
V
module cron
|
|
|
|
import time
|
|
|
|
// free the memory associated with the Expression.
|
|
[unsafe]
|
|
pub fn (ce &Expression) free() {
|
|
C.ce_free(ce)
|
|
}
|
|
|
|
// parse_expression parses a string into an Expression.
|
|
pub fn parse_expression(exp string) !&Expression {
|
|
out := C.ce_init()
|
|
res := C.ce_parse_expression(out, exp.str)
|
|
|
|
if res != .ok {
|
|
return error(res.str())
|
|
}
|
|
|
|
return out
|
|
}
|
|
|
|
// next calculates the next occurence of the cron schedule, given a reference
|
|
// point.
|
|
pub fn (ce &Expression) next(ref time.Time) time.Time {
|
|
st := SimpleTime{
|
|
year: ref.year
|
|
month: ref.month
|
|
day: ref.day
|
|
hour: ref.hour
|
|
minute: ref.minute
|
|
}
|
|
|
|
out := SimpleTime{}
|
|
C.ce_next(&out, ce, &st)
|
|
|
|
return time.new_time(time.Time{
|
|
year: out.year
|
|
month: out.month
|
|
day: out.day
|
|
hour: out.hour
|
|
minute: out.minute
|
|
})
|
|
}
|
|
|
|
// next_from_now calculates the next occurence of the cron schedule with the
|
|
// current time as reference.
|
|
pub fn (ce &Expression) next_from_now() time.Time {
|
|
out := SimpleTime{}
|
|
C.ce_next_from_now(&out, ce)
|
|
|
|
return time.new_time(time.Time{
|
|
year: out.year
|
|
month: out.month
|
|
day: out.day
|
|
hour: out.hour
|
|
minute: out.minute
|
|
})
|
|
}
|
|
|
|
// next_n returns the n next occurences of the expression, given a starting
|
|
// time.
|
|
pub fn (ce &Expression) next_n(ref time.Time, n int) []time.Time {
|
|
mut times := []time.Time{cap: n}
|
|
|
|
times << ce.next(ref)
|
|
|
|
for i in 1 .. n {
|
|
times << ce.next(times[i - 1])
|
|
}
|
|
|
|
return times
|
|
}
|