use cheetah_string::CheetahString;
use rocketmq_model::common::filter::expression_type::ExpressionType;
#[derive(Debug, Clone, PartialEq)]
pub struct MessageSelector {
expression_type: CheetahString,
expression: CheetahString,
}
impl MessageSelector {
pub(crate) fn new(expression_type: impl Into<CheetahString>, expression: impl Into<CheetahString>) -> Self {
Self {
expression_type: expression_type.into(),
expression: expression.into(),
}
}
pub fn by_sql(sql: impl Into<CheetahString>) -> Self {
Self::new(ExpressionType::SQL92, sql)
}
pub fn by_tag(tag: impl Into<CheetahString>) -> Self {
Self::new(ExpressionType::TAG, tag)
}
pub fn get_expression_type(&self) -> &CheetahString {
&self.expression_type
}
pub fn get_expression(&self) -> &CheetahString {
&self.expression
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn message_selector_by_sql() {
let sql = "a > 10";
let selector = MessageSelector::by_sql(sql);
assert_eq!(selector.get_expression_type(), ExpressionType::SQL92);
assert_eq!(selector.get_expression(), sql);
}
#[test]
fn message_selector_by_tag() {
let tag = "TagA || TagB";
let selector = MessageSelector::by_tag(tag);
assert_eq!(selector.get_expression_type(), ExpressionType::TAG);
assert_eq!(selector.get_expression(), tag);
}
}