pub mod application;
pub mod config;
pub mod subscription;
pub use application::ApplicationReaction;
pub use application::ApplicationReactionHandle;
pub use config::ApplicationReactionConfig;
pub struct ApplicationReactionBuilder {
id: String,
queries: Vec<String>,
priority_queue_capacity: Option<usize>,
auto_start: bool,
}
impl ApplicationReactionBuilder {
pub fn new(id: impl Into<String>) -> Self {
Self {
id: id.into(),
queries: Vec::new(),
priority_queue_capacity: None,
auto_start: true,
}
}
pub fn with_queries(mut self, queries: Vec<String>) -> Self {
self.queries = queries;
self
}
pub fn with_query(mut self, query_id: impl Into<String>) -> Self {
self.queries.push(query_id.into());
self
}
pub fn with_priority_queue_capacity(mut self, capacity: usize) -> Self {
self.priority_queue_capacity = Some(capacity);
self
}
pub fn with_auto_start(mut self, auto_start: bool) -> Self {
self.auto_start = auto_start;
self
}
pub fn build(self) -> (ApplicationReaction, ApplicationReactionHandle) {
ApplicationReaction::from_builder(
self.id,
self.queries,
self.priority_queue_capacity,
self.auto_start,
)
}
}
#[cfg(test)]
mod tests {
use super::*;
use drasi_lib::Reaction;
#[test]
fn test_application_builder_defaults() {
let (reaction, _handle) = ApplicationReactionBuilder::new("test-reaction").build();
assert_eq!(reaction.id(), "test-reaction");
}
#[test]
fn test_application_builder_custom() {
let (reaction, _handle) = ApplicationReaction::builder("test-reaction")
.with_queries(vec!["query1".to_string()])
.build();
assert_eq!(reaction.id(), "test-reaction");
assert_eq!(reaction.query_ids(), vec!["query1".to_string()]);
}
#[test]
fn test_application_new_constructor() {
let (reaction, _handle) =
ApplicationReaction::new("test-reaction", vec!["query1".to_string()]);
assert_eq!(reaction.id(), "test-reaction");
}
}