| Crates.io | siamese |
| lib.rs | siamese |
| version | 0.0.1 |
| created_at | 2025-05-29 16:58:49.991689+00 |
| updated_at | 2025-05-29 16:58:49.991689+00 |
| description | siamese - a rule engine built with rust. |
| homepage | https://siamese.aicmu.ac.cn/ |
| repository | https://github.com/retrofor/Siamese |
| max_upload_size | |
| id | 1694032 |
| size | 223,740 |
Ruler 是一个用 Rust 构建的高性能规则引擎,专为需要灵活业务逻辑的应用程序设计。它轻量、快速且易于集成,是初创项目和微服务的理想选择。
engine.add_rule(
RuleBuilder::new("discount", "VIP User Discound")
.condition(and![
eq!("user_type", "VIP"),
gt!("cart_total", 10000)
])
.action(update_field!("discount", 0.15))
.build()
);
添加依赖到 Cargo.toml:
[dependencies]
siamese = "0.1"
use siamese::{RuleExecutor, RuleBuilder, Condition, Value};
use std::collections::HashMap;
fn main() {
// 创建规则引擎
let mut engine = RuleExecutor::new();
// 定义折扣规则
let discount_rule = RuleBuilder::new("discount_rule", "VIP User Discound")
.condition(Condition::And(vec![
Condition::Equals { field: "user_type".into(), value: Value::String("VIP".into()) },
Condition::GreaterThan { field: "cart_total".into(), value: Value::Int(10000) }
]))
.action(Action::UpdateField {
field: "discount".into(),
value: Value::Float(0.15)
})
.build();
engine.add_rule(discount_rule);
// 准备输入数据
let mut facts = HashMap::new();
facts.insert("user_type".into(), Value::String("VIP".into()));
facts.insert("cart_total".into(), Value::Int(15000));
// 执行规则
match engine.execute(&facts) {
Ok(outputs) => {
println!("应用折扣: {:.0}%", outputs["discount"].as_float().unwrap() * 100.0);
}
Err(e) => eprintln!("执行错误: {}", e),
}
}
// 复杂条件示例
Condition::And(vec![
Condition::GreaterThan { field: "amount".into(), value: 5000.into() },
Condition::Or(vec![
Condition::Equals { field: "user_level".into(), value: "VIP".into() },
Condition::Not(Box::new(
Condition::Equals { field: "country".into(), value: "restricted".into() }
))
])
])
支持的条件类型:
Equals (等于)GreaterThan (大于)LessThan (小于)Contains (包含)And (与)Or (或)Not (非)| 动作类型 | 描述 | 示例 |
|---|---|---|
Log |
记录信息 | Action::Log { message: "规则触发" } |
UpdateField |
更新字段 | Action::UpdateField { field: "status", value: "approved" } |
CallExternalService |
调用外部服务 | Action::CallExternalService { endpoint: "/api/verify", ... } |
Composite |
组合多个动作 | Action::Composite(vec![action1, action2]) |
RuleBuilder::new("high_priority", "重要规则")
.priority(200) // 0-255,值越大优先级越高
// ...
// 黑五促销规则
let black_friday_rule = RuleBuilder::new("black_friday", "黑五促销")
.condition(Condition::Equals {
field: "campaign".into(),
value: Value::String("black_friday".into())
})
.action(Action::UpdateField {
field: "discount".into(),
value: Value::Float(0.3)
})
.build();
engine.add_rule(black_friday_rule);
// 管理员权限规则
let admin_rule = RuleBuilder::new("admin_access", "管理员权限")
.condition(Condition::And(vec![
Condition::Equals {
field: "role".into(),
value: Value::String("admin".into())
},
Condition::Equals {
field: "mfa_enabled".into(),
value: Value::Bool(true)
}
]))
.action(Action::UpdateField {
field: "access_level".into(),
value: Value::String("full".into())
})
.build();
Siamese 使用 MIT 许可证分发。详情请见 LICENSE 文件。