atac 0.21.0

Arguably a Terminal API Client. Feature-full, free, open-source, offline and account-less.
use crate::app::app::App;
use crate::app::business_logic::key_value::print_key_value_vector;
use crate::models::auth::Auth;
use crate::models::protocol::http::body::ContentType;
use crate::models::protocol::protocol::Protocol;

impl App<'_> {
    pub fn cli_describe_request(&mut self, collection_index: usize, request_index: usize) -> anyhow::Result<()> {
        let local_request = self.get_request_as_local_from_indexes(&(collection_index, request_index));
        let request = local_request.read();

        println!("name: {}", request.name);
        println!("protocol: {}", request.protocol.to_string());

        if let Protocol::HttpRequest(request) = &request.protocol {
            println!("method: {}", request.method);
        }

        println!("url: {}", request.url_with_params_to_string());

        if !request.headers.is_empty() {
            println!("headers:");
            print_key_value_vector(&request.headers, Some("\t"));
        }

        match &request.auth {
            Auth::NoAuth => {}
            Auth::BasicAuth { username, password } => println!("auth: Basic\n\t{username}\n\t{password}"),
            Auth::BearerToken { token: bearer_token } => println!("auth: Bearer token\n\t{bearer_token}"),
        }

        if let Protocol::HttpRequest(http_request) = &request.protocol {
            match &http_request.body {
                ContentType::NoBody => {}
                ContentType::File(file) => println!("body: {}\n{file}", &http_request.body.to_string()),
                ContentType::Multipart(form) | ContentType::Form(form) => {
                    println!("body: {}", &http_request.body.to_string());
                    print_key_value_vector(form, Some("\t"));
                },
                ContentType::Raw(body) | ContentType::Json(body) | ContentType::Xml(body) | ContentType::Html(body) | ContentType::Javascript(body) => {
                    println!("body: {}{body}", &http_request.body.to_string());
                }
            }
        }
        
        match (request.scripts.pre_request_script.is_some(), request.scripts.post_request_script.is_some()) {
            (false, false) => {}
            (true, false) => println!("scripts:\n\tpre-request"),
            (false, true) => println!("scripts:\n\tpost-request"),
            (true, true) => println!("scripts:\n\tpre and post-request"),
        }

        Ok(())
    }
}