rustyproxy 1.1.9

GUI for the rustyproxy project
Documentation
use super::inspector::Inspector;

#[derive(Debug, Default)]
pub struct Inspectors {
    items: Vec<Inspector>,
    selected: usize,
    api_addr: Option<String>,
    api_port: Option<usize>,
    api_secret: Option<String>,
}

impl Inspectors {
    pub fn display(&mut self, ui: &mut egui::Ui) {
        egui::menu::bar(ui, |ui| {
            for idx in 0..self.items.len() {
                if ui
                    .selectable_label(idx == self.selected, idx.to_string())
                    .clicked()
                {
                    self.selected = idx;
                }
                ui.separator();
            }
        });
        ui.separator();
        let api_addr = self.api_addr.clone();
        let api_port = self.api_port.clone();
        let api_secret = self.api_secret.clone();
        if let Some(ins) = self.items.get_mut(self.selected) {
            ins.display(ui, api_addr, api_port, api_secret);

            if let Some((idx, version, status, resp_headers, resp_body, payload)) = &ins.selected {
                let request = &ins.bf_request.replace("$[PAYLOAD]$", payload);
                let response = format!("{} {}\r\n{}\r\n{}", version, status, resp_headers, resp_body);
                let mut new_inspector = Inspector::from_ref_inspector(&ins);

                new_inspector.request = request.to_string();
                new_inspector.response = response.to_string();
                new_inspector.modified_request = request.to_string();
                new_inspector.new_response = response.to_string();

                ins.selected = None;
                self.items.push(
                    new_inspector
                ); 
            }
        }
        self.items.retain(|x| { x.is_active});
    }

    pub fn add_inspector(&mut self, i: Inspector) {
        self.items.push(i);
        self.selected = self.items.len() - 1;
    }

    pub fn new(
        api_addr: Option<String>,
        api_port: Option<usize>,
        api_secret: Option<String>,
    ) -> Self {
        Self {
            api_addr,
            api_port,
            api_secret,
            ..Default::default()
        }
    }
}