Skip to main content

aft/bash_rewrite/
dispatch.rs

1use 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}