redirectionio 2.5.2

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

#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct StatusCodeUpdate {
    pub status_code: u16,
    pub on_response_status_codes: Vec<u16>,
    pub fallback_status_code: u16,
    pub rule_id: Option<String>,
    pub fallback_rule_id: Option<String>,
    pub unit_id: Option<String>,
    pub target_hash: Option<String>,
}

impl StatusCodeUpdate {
    pub fn get_status_code(&self, response_status_code: u16) -> (u16, Option<String>) {
        if response_status_code == 0 && self.on_response_status_codes.is_empty() {
            return (self.status_code, self.rule_id.clone());
        }

        if self.on_response_status_codes.iter().any(|v| *v == response_status_code) {
            return (self.status_code, self.rule_id.clone());
        }

        if response_status_code != 0 {
            return (self.fallback_status_code, self.fallback_rule_id.clone());
        }

        (0, None)
    }
}