use serde_json::Value;
use anyhow::{Context, Error, Ok, Result};
use reqwest::header::{ACCEPT, AUTHORIZATION, CONTENT_TYPE};
use crate::logger::prelude::*;
use crate::utils::stringify::Stringify;
use crate::{create_get_request, create_post_request, LOGGER};
use colored::Colorize;
#[macro_export]
macro_rules! create_get_request {
($client: expr, $api_url: expr, $api_key: expr) => {
$client
.get($api_url)
.header(ACCEPT, "application/json")
.header(AUTHORIZATION, format!("Bearer {}", $api_key))
.send()
.await
.context("Error sending request.")
};
}
#[macro_export]
macro_rules! create_post_request {
($client: expr, $api_url: expr, $api_key: expr, $payload: expr, $process: expr) => {
$client
.post($api_url)
.header(ACCEPT, "application/json")
.header(CONTENT_TYPE, "application/json")
.header(AUTHORIZATION, format!("Bearer {}", $api_key))
.body($payload)
.send()
.await
.context(format!("Error sending request :: {:?}", $process))
};
}
#[macro_export]
macro_rules! create_delete_request {
($client: expr, $api_url: expr, $api_key: expr) => {
$client
.delete($api_url)
.header(ACCEPT, "application/json")
.header(AUTHORIZATION, format!("Bearer {}", $api_key))
.send()
.await
.context("Error sending request.")
};
}
#[macro_export]
macro_rules! handle_response {
($response: expr, $process: expr) => {
if $response.status().is_success() {
let result = $response.text().await.context("Error parsing response.")?;
let data: Value = serde_json::from_str(&result)?;
LOGGER!("<response> -> ", format!("{:#?}", data), LogLevel::SUCCESS);
Ok(data)
} else {
let result = $response.text().await.context("Error parsing response.")?;
let data: Value = serde_json::from_str(&result)?;
let message = data["message"]
.as_str()
.unwrap_or(concat!("An error occurred :: Process -> ", $process));
LOGGER!(
"<response status> -> ",
format!("{:#?}", message),
LogLevel::CRITICAL
);
Err(anyhow::anyhow!("<Error>: {:#?}", data))
}
};
}
#[macro_export]
macro_rules! handle_response_data {
($response: expr, $process: expr) => {
if $response.status().is_success() {
let result = $response.text().await.context("Error parsing response.")?;
let data: Value = serde_json::from_str(&result)?;
if data.is_array() && data.as_array().unwrap().is_empty() {
LOGGER!(
"<reponse> -> ",
"⚙️ :: No <services> found.",
LogLevel::WARN
);
} else {
LOGGER!("<response> -> ", format!("{:#?}", data), LogLevel::SUCCESS);
}
Ok(data)
} else {
let result = $response.text().await.context("Error parsing response.")?;
let data: Value = serde_json::from_str(&result)?;
let message = data["message"]
.as_str()
.unwrap_or(concat!("An error occurred :: Process -> ", $process));
LOGGER!(
"<response status> -> ",
format!("{:#?}", message),
LogLevel::CRITICAL
);
Err(anyhow::anyhow!("<Error>: {:#?}", data))
}
};
}