From b4c569e900316d0816d4ad5bfd17ab87fb24d8cc Mon Sep 17 00:00:00 2001 From: Harshil Date: Sat, 13 Jun 2026 11:53:51 +0530 Subject: [PATCH 1/2] bugfix: invalid headers error handling and typo in parser --- src/parser.rs | 2 +- src/runner.rs | 20 +++++++++++--------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/parser.rs b/src/parser.rs index 0db700c..dacf106 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -32,7 +32,7 @@ pub fn parse(input: String) -> Result { "exit" => Ok(Parsed::Exit), - _ => Err(format!("Reference Error: {} not defined", tokens[0])), + _ => Err(format!("Unknown command: {} not defined", tokens[0])), } } diff --git a/src/runner.rs b/src/runner.rs index 0db65a9..0277769 100644 --- a/src/runner.rs +++ b/src/runner.rs @@ -45,21 +45,23 @@ pub fn fetch( //Global Headers let mut headers = HeaderMap::new(); for (key, value) in global_headers { - headers.insert( - HeaderName::from_bytes(key.to_ascii_lowercase().as_bytes()).unwrap(), - HeaderValue::from_bytes(value.as_bytes()).unwrap(), - ); + let name = HeaderName::from_bytes(key.to_ascii_lowercase().as_bytes()) + .map_err(|_| format!("Invalid header name: {key}"))?; + let val = HeaderValue::from_bytes(value.as_bytes()) + .map_err(|_| format!("Invalid header value for '{key}': {value}"))?; + headers.insert(name, val); } // Request Headers for (key, value) in &request.headers { - headers.insert( - HeaderName::from_bytes(key.to_ascii_lowercase().as_bytes()).unwrap(), - HeaderValue::from_bytes(value.as_bytes()).unwrap(), - ); + let name = HeaderName::from_bytes(key.to_ascii_lowercase().as_bytes()) + .map_err(|_| format!("Invalid header name: {key}"))?; + let val = HeaderValue::from_bytes(value.as_bytes()) + .map_err(|_| format!("Invalid header value for '{key}': {value}"))?; + headers.insert(name, val); } if !headers.contains_key(CONTENT_TYPE) { - headers.insert(CONTENT_TYPE, "application/json".parse().unwrap()); + headers.insert(CONTENT_TYPE, HeaderValue::from_static("application/json")); } req_builder = req_builder.headers(headers); From 5cf094493a5730bfa1a8ac09d1b292f65bcddb10 Mon Sep 17 00:00:00 2001 From: Harshil Date: Sat, 13 Jun 2026 11:58:22 +0530 Subject: [PATCH 2/2] feat: PATCH method added --- src/helper.rs | 4 ++-- src/parser.rs | 2 +- src/request.rs | 2 ++ src/runner.rs | 1 + 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/helper.rs b/src/helper.rs index 7700334..6540e41 100644 --- a/src/helper.rs +++ b/src/helper.rs @@ -5,8 +5,8 @@ use rustyline::validate::Validator; use rustyline::{Context, Helper, Result}; const BUILTINS: &[&str] = &[ - "GET", "POST", "PUT", "DELETE", "base", "header", "exit", "help", "history", "rerun", "set", - "unset", "save", "run", "vars", "headers", "requests", + "GET", "POST", "PUT", "PATCH", "DELETE", "base", "header", "exit", "help", "history", "rerun", + "set", "unset", "save", "run", "vars", "headers", "requests", ]; pub struct ShellHelper; diff --git a/src/parser.rs b/src/parser.rs index dacf106..7ac0750 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -19,7 +19,7 @@ pub fn parse(input: String) -> Result { let token_match = tokens[0].to_lowercase(); match token_match.as_str() { - "get" | "post" | "put" | "delete" => { + "get" | "post" | "put" | "patch" | "delete" => { let result = parse_request(input)?; Ok(Parsed::Request(result)) } diff --git a/src/request.rs b/src/request.rs index 3c85059..074e49e 100644 --- a/src/request.rs +++ b/src/request.rs @@ -38,6 +38,7 @@ pub enum Method { GET, POST, PUT, + PATCH, DELETE, } @@ -47,6 +48,7 @@ impl Method { Method::GET => "GET", Method::POST => "POST", Method::PUT => "PUT", + Method::PATCH => "PATCH", Method::DELETE => "DELETE", } } diff --git a/src/runner.rs b/src/runner.rs index 0277769..5aef6f9 100644 --- a/src/runner.rs +++ b/src/runner.rs @@ -39,6 +39,7 @@ pub fn fetch( Method::GET => client.get(full_url), Method::POST => client.post(full_url), Method::PUT => client.put(full_url), + Method::PATCH => client.patch(full_url), Method::DELETE => client.delete(full_url), };