aboutsummaryrefslogtreecommitdiff
path: root/src/output.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/output.rs')
-rw-r--r--src/output.rs104
1 files changed, 104 insertions, 0 deletions
diff --git a/src/output.rs b/src/output.rs
new file mode 100644
index 0000000..d181d0f
--- /dev/null
+++ b/src/output.rs
@@ -0,0 +1,104 @@
+use colored::*;
+use jsonformat::{format_json, Indentation};
+use std::fmt::Display;
+
+pub struct BarbOutput {
+ request: bool,
+ req_headers: bool,
+ headers: bool,
+ body: bool,
+ raw_body: bool,
+ color: bool,
+}
+
+impl BarbOutput {
+ fn _print_header<T, I>(&self, name: T, value: I)
+ where T: Display, I: Display{
+ println!("{}: {}", name, value);
+ }
+
+ pub fn new(request: bool, req_headers: bool, headers: bool, body: bool, raw_body: bool, color: bool) -> BarbOutput {
+ BarbOutput {
+ request,
+ req_headers,
+ headers,
+ body,
+ raw_body,
+ color,
+ }
+ }
+
+ pub fn req(&self, method: String, url: String) {
+ if !self.request {
+ return;
+ }
+ if self.color {
+ println!("{} {}", method.purple(), url.purple());
+ } else {
+ println!("{} {}", method, url);
+ }
+ }
+
+ pub fn req_hdr(&self, name: String, value: String) {
+ if !self.req_headers {
+ return;
+ }
+ if self.color {
+ self._print_header(name.yellow(), value);
+ } else {
+ self._print_header(name, value);
+ }
+ }
+
+ pub fn end_req(&self) {
+ if self.req_headers || self.request {
+ println!("");
+ }
+ }
+
+ pub fn resp_hdr(&self, name: String, value: &str) {
+ if !self.headers {
+ return;
+ }
+ if self.color {
+ self._print_header(name.blue(), value);
+ } else {
+ self._print_header(name, value);
+ }
+ }
+
+ pub fn end_resp_hdr(&self) {
+ if self.headers {
+ println!("");
+ }
+ }
+
+ pub fn status(&self, code: u16, text: &str) {
+ if !self.headers {
+ return;
+ }
+ if self.color {
+ if code >= 400 {
+ println!("{} {}", code.to_string().red(), text.red());
+ } else {
+ println!("{} {}", code.to_string().green(), text);
+ }
+ } else {
+ println!("{} {}", code, text);
+ }
+ }
+
+ pub fn body(&self, body: String) {
+ if !self.body {
+ return;
+ }
+
+ println!(
+ "{}",
+ match self.raw_body {
+ true => body,
+ false => format_json(body.as_str(), Indentation::Default),
+ }
+ );
+ }
+}