///|
fn main raise {
let pattern = @cep.Pattern::new(
"unpaid-order",
[@cep.Stage::new("order", @cep.Kind("placed"))],
30000L,
absence=@cep.Any([@cep.Kind("paid"), @cep.Kind("cancelled")]),
)
let session = @cep.Session::new([pattern])
ignore(
session.apply(
@cep.Observe(@cep.Event::new("o1", "order/100", 0L, "placed")),
),
)
ignore(
session.apply(
@cep.Observe(@cep.Event::new("o2", "order/200", 10000L, "placed")),
),
)
ignore(session.apply(@cep.Advance(10000L)))
// The journal can be stored by a host. Restoring repeats detection inputs;
// it does not commit external payments or promise sink delivery semantics.
let restored = @cep.parse_session(@cep.format_session(session))
ignore(
restored.apply(
@cep.Observe(@cep.Event::new("p2", "order/200", 40000L, "paid")),
),
)
let result = restored.finish()
assert_eq(result.matches().length(), 1)
assert_eq(result.matches()[0].key(), "order/100")
assert_eq(result.matches()[0].ended(), 30000L)
assert_true(result.matches()[0].is_absence())
println(
"unpaid order: \{result.matches()[0].key()} deadline=\{result.matches()[0].ended()}",
)
println("order/200 payment at its exact deadline cancels its absence match")
}