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
//! Watermark-driven window joins.
//!
//! Three join semantics are implemented:
//!
//! 1. [`tumbling_tumbling::TumblingTumblingJoin`] — both sides use the same
//! fixed tumbling window; only events whose timestamps fall in the same
//! window pane are considered for joining. Closure: when the watermark
//! advances past `pane_end + allowed_lateness_ms`.
//!
//! 2. [`tumbling_sliding::TumblingSlidingJoin`] — the *left* stream uses
//! tumbling windows; the *right* stream uses sliding windows. An event
//! on either side is considered against every active right-pane that
//! overlaps with its tumbling pane.
//!
//! 3. [`session_session::SessionSessionJoin`] — both sides use session
//! windows defined by an inactivity gap. Two events join when their
//! sessions overlap (at least one event timestamp from each side falls
//! within the union session).
//!
//! All three implementations share:
//!
//! * Per-stream key extraction via a closure (`F: Fn(&L) -> K`).
//! * Deterministic state cleanup driven by an externally supplied watermark.
//! * Configurable allowed lateness measured in milliseconds.
//! * Statistics ([`WindowJoinStats`]) tracking emitted / dropped / late
//! events.
//!
//! Refer to `docs/engine_overview.md` for the watermark/window/join contract.
pub use ;
pub use ;
pub use ;
// ─── Shared types ────────────────────────────────────────────────────────────
/// Join key extracted from each event.
pub type WindowJoinKey = String;
/// A successful join result.
/// Per-join statistics.