ready-active-safe 0.1.3

Lifecycle engine for externally driven systems
Documentation
# Deadline

*Requires feature `time`.*

An expiration point expressed as an [`Instant`](instant.md).

## Construction

```rust
use ready_active_safe::time::{Deadline, Instant};

let deadline = Deadline::at(Instant::from_nanos(5_000_000_000));
assert_eq!(deadline.instant().as_nanos(), 5_000_000_000);
```

## `is_expired`

```rust
use ready_active_safe::time::{Deadline, Instant};

let deadline = Deadline::at(Instant::from_nanos(1_000_000_000));

// Before deadline
assert!(!deadline.is_expired(Instant::from_nanos(500_000_000)));

// Exactly at deadline
assert!(deadline.is_expired(Instant::from_nanos(1_000_000_000)));

// After deadline
assert!(deadline.is_expired(Instant::from_nanos(2_000_000_000)));
```

## Using with a Clock

```rust
use ready_active_safe::time::{Clock, Deadline, Instant, ManualClock};
use std::time::Duration;

let clock = ManualClock::new(Instant::from_nanos(0));
let deadline = Deadline::at(Instant::from_nanos(1_000_000_000));

assert!(!deadline.is_expired(clock.now()));

clock.advance(Duration::from_secs(2));
assert!(deadline.is_expired(clock.now()));
```

## Edge Cases

A deadline at `Instant::from_nanos(0)` is immediately expired:

```rust
use ready_active_safe::time::{Deadline, Instant};

let deadline = Deadline::at(Instant::from_nanos(0));
assert!(deadline.is_expired(Instant::from_nanos(0)));
```

## See Also

- [`Instant`]instant.md — the underlying time representation
- [`Clock`]clock.md — provides the "now" to check against
- [`ManualClock`]manual_clock.md — test-friendly clock for deadline testing