From 8e15bfb0be4ddada066e95b34607f3f6bfad88aa Mon Sep 17 00:00:00 2001 From: Matthias Endler Date: Wed, 17 Feb 2021 12:12:37 +0100 Subject: [PATCH] Implement Display and Serialize for Response --- src/types.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/types.rs b/src/types.rs index 1c26bc5..f29a31c 100644 --- a/src/types.rs +++ b/src/types.rs @@ -1,5 +1,6 @@ use crate::{collector::Input, uri::Uri}; use anyhow::anyhow; +use serde::{Serialize, Serializer}; use std::{collections::HashSet, convert::TryFrom, fmt::Display}; #[derive(Debug, PartialEq, Eq, Hash, Clone)] @@ -37,10 +38,12 @@ impl TryFrom for RequestMethod { } } -#[derive(Debug)] +#[derive(Debug, PartialEq, Eq, Hash, Serialize)] pub struct Response { + #[serde(flatten)] pub uri: Uri, pub status: Status, + #[serde(skip)] pub source: Input, } @@ -54,6 +57,20 @@ impl Response { } } +impl Display for Response { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let metadata = match &self.status { + Status::Ok(code) | Status::Redirected(code) | Status::Failed(code) => { + format!(" [{}]", code) + } + Status::Timeout(code) if code.is_some() => format!(" [{}]", code.unwrap()), + Status::Error(e) => format!(" ({})", e), + _ => "".to_string(), + }; + write!(f, "{} {}{}", self.status.icon(), self.uri, metadata) + } +} + /// Response status of the request #[derive(Debug)] pub enum Status {