Uhrwerk, a simple scheduler

Uhrwerk is a simple scheduler, forked from clokwerk, which itself is inspired by Python’s Schedule and Ruby’s clockwork. It uses a similar DSL for scheduling, rather than parsing cron strings.
Uhrwerk supports both synchronous and asynchronous tasks.
Usage
// Import week days and WeekDay
use *;
// Scheduler and trait for .seconds(), .minutes(), etc.
use ;
// Create a new scheduler
let mut scheduler = new;
// or a scheduler with a given timezone
let mut scheduler = new_with_utc_offset;
// Add some tasks to it
scheduler
.every
.plus
.run;
scheduler
.every
.at
.run;
scheduler
.every
.at
.and_every
.at
.run;
// Manually run the scheduler in an event loop
for _ in 1 .. 10
// Or run it in a background thread
let thread_handle = scheduler.watch_thread;
// The scheduler stops when `thread_handle` is dropped, or `stop` is called
thread_handle.stop;
By default, dates and times are relative to the local timezone, but the scheduler
can be made to use a different timezone using Scheduler::new_with_utc_offset.
For more details, see Scheduler or its async counterpart, AsyncScheduler.
Caveats
Some combinations of times or intervals are permissible, but make little sense, e.g.
every(10.seconds()).at("16:00"), which would next run at the next 4 PM after the
next multiple of 10 seconds.
Trivia
Uhrwerk is the German word for clockwork.