#![forbid(unsafe_code)]
mod matcher;
mod pattern;
pub use matcher::{CepKeyState, PartialMatch, PartitionedCepMatcher, SequentialPatternMatcher};
pub use pattern::{CepCompileError, CompiledPattern, Pattern, PatternStage, UnsupportedCombinator};
pub const STREAM_CEP_PREFIX: &str = "stream:cep:";
pub fn encode_cep_fragment(
key_column: &str,
event_time_column: &str,
stage_column: &str,
pattern: &CompiledPattern,
) -> Result<String, serde_json::Error> {
#[derive(serde::Serialize)]
struct Spec<'a> {
key_column: &'a str,
event_time_column: &'a str,
stage_column: &'a str,
pattern: &'a CompiledPattern,
}
let json = serde_json::to_string(&Spec {
key_column,
event_time_column,
stage_column,
pattern,
})?;
Ok(format!("{STREAM_CEP_PREFIX}{json}"))
}