redirectionio 3.1.0

Redirection IO Library to handle matching rule, redirect and filtering headers and body.
Documentation
use serde::{Deserialize, Serialize};

use crate::{action::Action, api::Rule, http::Request, router::Trace};

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct TraceAction {
    action: Action,
    rule: Rule,
}

impl TraceAction {
    pub fn from_trace_rules(traces: &[Trace<Rule>], request: &Request) -> Vec<TraceAction> {
        let mut traces_action = Vec::new();
        let mut current_action = Action::default();
        let mut routes = Trace::<Rule>::get_routes_from_traces(traces);

        // Reverse order of sort
        routes.sort_by_key(|a| a.priority());

        for route in routes {
            let (action_rule_opt, reset, stop, _) = Action::from_route_rule(route.clone(), request);

            if let Some(action_rule) = action_rule_opt {
                if reset {
                    current_action = action_rule;
                } else {
                    current_action.merge(action_rule);
                }
            }

            traces_action.push(TraceAction {
                action: current_action.clone(),
                rule: route.handler().clone(),
            });

            if stop {
                return traces_action;
            }
        }

        traces_action
    }
}