1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//! Rule-based routing engine for trojan-rs.
//!
//! Provides a rule matching engine compatible with Surge rule-set (`.list`)
//! and Clash rule-provider (YAML) formats. Supports DOMAIN, DOMAIN-SUFFIX,
//! DOMAIN-KEYWORD, and IP-CIDR rule types with optimized data structures.
//!
//! # Architecture
//!
//! - **Matchers**: `DomainMatcher` (FxHashSet), `KeywordMatcher` (Aho-Corasick),
//! `CidrMatcher` (sorted binary search)
//! - **Parsers**: Surge `.list` and Clash YAML formats
//! - **Providers**: File-based loading (HTTP in Phase 3)
//! - **Engine**: `RuleEngine` compiles rule-sets and evaluates rules in order
//!
//! # Example
//!
//! ```
//! use trojan_rules::{RuleEngineBuilder, Action};
//! use trojan_rules::rule::{ParsedRule, MatchContext};
//! use std::net::{IpAddr, Ipv4Addr};
//!
//! let mut builder = RuleEngineBuilder::new();
//! builder.add_rule_set("ads", vec![
//! ParsedRule::DomainSuffix("ad.example.com".into()),
//! ParsedRule::DomainKeyword("tracking".into()),
//! ]);
//! builder.add_rule_set_rule("ads", Action::Reject);
//! builder.set_final(Action::Direct);
//!
//! let engine = builder.build().unwrap();
//!
//! let ctx = MatchContext {
//! domain: Some("tracker.ad.example.com"),
//! dest_ip: None,
//! dest_port: 443,
//! src_ip: IpAddr::V4(Ipv4Addr::LOCALHOST),
//! };
//! assert_eq!(engine.match_request(&ctx), &Action::Reject);
//! ```
pub use ;
pub use RulesError;
pub use Action;