Skip to content

Commit

Permalink
Merge pull request #61 from Julien-cpsn/60-bug-error-when-sending-a-s…
Browse files Browse the repository at this point in the history
…imple-get-request

Fixed a bug where you could not use the app if you did not have an en…
  • Loading branch information
Julien-cpsn committed May 3, 2024
2 parents 1145c2a + 9813b0b commit 5a88339
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 33 deletions.
20 changes: 13 additions & 7 deletions src/app/app_logic/environment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,11 @@ use crate::app::app::App;
use crate::request::environment::Environment;

impl App<'_> {
pub fn get_selected_env_as_local(&self) -> Arc<RwLock<Environment>> {
self.environments[self.selected_environment].clone()
pub fn get_selected_env_as_local(&self) -> Option<Arc<RwLock<Environment>>> {
match self.environments.get(self.selected_environment) {
None => None,
Some(env) => Some(env.clone())
}
}

pub fn next_environment(&mut self) {
Expand All @@ -31,9 +34,9 @@ impl App<'_> {

let local_env = self.get_selected_env_as_local();

{
if let Some(local_env) = local_env {
let env = local_env.read();

for (key, value) in &env.values {
tmp_string = tmp_string.replace(&format!("{{{{{}}}}}", key), value);
}
Expand All @@ -54,7 +57,7 @@ impl App<'_> {

let local_env = self.get_selected_env_as_local();

{
if let Some(local_env) = local_env {
let env = local_env.read();

for match_ in regex.captures_iter(input) {
Expand All @@ -73,9 +76,12 @@ impl App<'_> {
}
}
}
}

spans.push(Span::raw(String::from(&input[tmp_index..input.len()])));
spans.push(Span::raw(String::from(&input[tmp_index..input.len()])));
}
else {
spans.push(Span::raw(input.to_string()));
}

return Line::from(spans);
}
Expand Down
22 changes: 12 additions & 10 deletions src/app/app_logic/request/scripts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,14 +85,15 @@ function pretty_print(data) {
}
"#;

pub(super) fn execute_pre_request_script(user_script: &String, request: &Request, env: &IndexMap<String, String>) -> (Option<Request>, IndexMap<String, String>, String) {
pub(super) fn execute_pre_request_script(user_script: &String, request: &Request, env: Option<IndexMap<String, String>>) -> (Option<Request>, Option<IndexMap<String, String>>, String) {
// Instantiate the execution context
let mut context = Context::default();

let env = env.clone();

let request_json = serde_json::to_string(request).unwrap();
let env_json = serde_json::to_string(&env).unwrap();
let env_json = match &env {
Some(env) => serde_json::to_string(env).unwrap(),
None => String::from("undefined")
};

let script = format!(r#"
let request = {request_json};
Expand All @@ -119,22 +120,23 @@ pub(super) fn execute_pre_request_script(user_script: &String, request: &Request

let stringed_result = result.as_string().unwrap().to_std_string_escaped();

let (result_request, result_env_values, console_output) = match serde_json::from_str::<(Request, IndexMap<String, String>, String)>(&stringed_result) {
let (result_request, result_env_values, console_output) = match serde_json::from_str::<(Request, Option<IndexMap<String, String>>, String)>(&stringed_result) {
Ok((result_request, result_env_values, console_output)) => (Some(result_request), result_env_values, console_output),
Err(error) => (None, env, error.to_string())
};

return (result_request, result_env_values, console_output);
}

pub(super) fn execute_post_request_script(user_script: &String, response: &RequestResponse, env: &IndexMap<String, String>) -> (Option<RequestResponse>, IndexMap<String, String>, String) {
pub(super) fn execute_post_request_script(user_script: &String, response: &RequestResponse, env: Option<IndexMap<String, String>>) -> (Option<RequestResponse>, Option<IndexMap<String, String>>, String) {
// Instantiate the execution context
let mut context = Context::default();

let env = env.clone();

let response_json = serde_json::to_string(response).unwrap();
let env_json = serde_json::to_string(&env).unwrap();
let env_json = match &env {
Some(env) => serde_json::to_string(env).unwrap(),
None => String::from("undefined")
};

let script = format!(r#"
let response = {response_json};
Expand All @@ -161,7 +163,7 @@ pub(super) fn execute_post_request_script(user_script: &String, response: &Reque

let stringed_result = result.as_string().unwrap().to_std_string_escaped();

let (response_result, result_env_values, console_output) = match serde_json::from_str::<(RequestResponse, IndexMap<String, String>, String)>(&stringed_result) {
let (response_result, result_env_values, console_output) = match serde_json::from_str::<(RequestResponse, Option<IndexMap<String, String>>, String)>(&stringed_result) {
Ok((mut response_result, result_env_values, console_output)) => {
// Avoid loosing those fields since they are not serialized
response_result.duration = response.duration.clone();
Expand Down
55 changes: 40 additions & 15 deletions src/app/app_logic/request/send.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,15 +100,28 @@ impl App<'_> {
},
Some(pre_request_script) => {
let local_env = self.get_selected_env_as_local();
let mut env = local_env.write();

let (result_request, env_variables, console_output) = execute_pre_request_script(pre_request_script, &*selected_request, &env.values);

env.values = env_variables;
save_environment_to_file(&*env);

// Drops the write mutex
drop(env);
let env_values = match &local_env {
None => None,
Some(local_env) => {
let env = local_env.read();
Some(env.values.clone())
}
};

let (result_request, env_variables, console_output) = execute_pre_request_script(pre_request_script, &*selected_request, env_values);

match &local_env {
None => {},
Some(local_env) => match env_variables {
None => {},
Some(env_variables) => {
let mut env = local_env.write();
env.values = env_variables;
save_environment_to_file(&*env);
}
}
}

let mut highlighted_console_output = highlight(&console_output, "json").unwrap();

Expand Down Expand Up @@ -377,15 +390,27 @@ impl App<'_> {
response
},
Some(post_request_script) => {
let mut env = local_env.write();

let (result_response, env_variables, result_console_output) = execute_post_request_script(post_request_script, &response, &env.values);
let env_values = match &local_env {
None => None,
Some(local_env) => {
let env = local_env.read();
Some(env.values.clone())
}
};

env.values = env_variables;
save_environment_to_file(&*env);
let (result_response, env_variables, result_console_output) = execute_post_request_script(post_request_script, &response, env_values);

// Drops the write mutex
drop(env);
match &local_env {
None => {},
Some(local_env) => match env_variables {
None => {},
Some(env_variables) => {
let mut env = local_env.write();
env.values = env_variables;
save_environment_to_file(&*env);
}
}
}

let mut highlighted_console_output = highlight(&result_console_output, "json").unwrap();

Expand Down
2 changes: 1 addition & 1 deletion src/app/ui/environments.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use crate::app::app::App;

impl<'a> App<'a> {
pub(super) fn render_environments(&mut self, frame: &mut Frame, rect: Rect) {
let local_env = self.get_selected_env_as_local();
let local_env = self.get_selected_env_as_local().unwrap();
let env = local_env.read();

let current_environment = env.name.clone();
Expand Down

0 comments on commit 5a88339

Please sign in to comment.