aft/bash_rewrite/
dispatch.rs1use crate::bash_rewrite::rules::{
2 CatAppendRule, CatRule, FindRule, GrepRule, LsRule, RgRule, SedRule,
3};
4use crate::bash_rewrite::RewriteRule;
5use crate::context::AppContext;
6use crate::protocol::Response;
7
8pub fn dispatch(command: &str, session_id: Option<&str>, ctx: &AppContext) -> Option<Response> {
9 if !ctx.config().experimental_bash_rewrite {
10 return None;
11 }
12
13 let rules: [&dyn RewriteRule; 7] = [
14 &GrepRule,
15 &RgRule,
16 &FindRule,
17 &CatRule,
18 &CatAppendRule,
19 &SedRule,
20 &LsRule,
21 ];
22
23 for rule in rules {
24 if rule.matches(command) {
25 match rule.rewrite(command, session_id, ctx) {
26 Ok(response) => return Some(response),
27 Err(message) => {
28 log::warn!("bash rewrite rule {} declined: {}", rule.name(), message);
29 return None;
30 }
31 }
32 }
33 }
34
35 None
36}