58 lines
1.1 KiB
V
58 lines
1.1 KiB
V
module cron
|
|
|
|
#flag -I @VMODROOT/c
|
|
#flag @VMODROOT/c/parse.o
|
|
#flag @VMODROOT/c/expression.o
|
|
#include "expression.h"
|
|
|
|
pub struct C.cron_expression {
|
|
minutes &u8
|
|
hours &u8
|
|
days &u8
|
|
months &u8
|
|
minute_count u8
|
|
hour_count u8
|
|
day_count u8
|
|
month_count u8
|
|
}
|
|
|
|
pub type Expression = C.cron_expression
|
|
|
|
struct C.cron_simple_time {
|
|
year int
|
|
month int
|
|
day int
|
|
hour int
|
|
minute int
|
|
}
|
|
|
|
type SimpleTime = C.cron_simple_time
|
|
|
|
enum ParseError as u8 {
|
|
ok = 0
|
|
invalid_expression = 1
|
|
invalid_number = 2
|
|
out_of_range = 3
|
|
too_many_parts = 4
|
|
}
|
|
|
|
fn (e ParseError) str() string {
|
|
return match e {
|
|
.ok { '' }
|
|
.invalid_expression { 'Invalid expression' }
|
|
.invalid_number { 'Invalid number' }
|
|
.out_of_range { 'Out of range' }
|
|
.too_many_parts { 'Too many parts' }
|
|
}
|
|
}
|
|
|
|
fn C.ce_init() &C.cron_expression
|
|
|
|
fn C.ce_free(ce &C.cron_expression)
|
|
|
|
fn C.ce_next(out &C.cron_simple_time, ce &C.cron_expression, ref &C.cron_simple_time)
|
|
|
|
fn C.ce_next_from_now(out &C.cron_simple_time, ce &C.cron_expression)
|
|
|
|
fn C.ce_parse_expression(out &C.cron_expression, s &char) ParseError
|