use
{
super::
{
Content,
KeyValuePair,
status::
{
Status,
},
version::
{
Version,
},
},
};
pub struct Response
{
pub version: Version,
pub status: Status,
pub header: Vec < KeyValuePair >,
pub content: Vec < u8 >,
}
pub fn Response ( )
-> Response
{
Response
{
version: Version::HTTP_10,
status: Status::Ok,
header: Vec::new(),
content: Vec::new(),
}
}
impl Response
{
pub fn into_vector
(
mut self,
)
-> Vec < u8 >
{
let mut buffer: Vec < u8 > = Vec::new();
let mut header
= format!
(
"{} {}\r\n{}\r\n",
self.version,
self.status,
{
let mut result = "".to_owned ( );
for pair in &self.header
{
result
.push_str
(
&format!
(
"{}: {}\r\n",
pair.key,
pair.value,
)
);
}
result
},
).into_bytes ( );
buffer.append ( &mut header );
buffer.append ( &mut self.content );
buffer
}
pub fn addHeader
(
mut self,
key: String,
value: String,
)
-> Self
{
self
.header
.push
(
KeyValuePair
{
key,
value,
}
);
self
}
pub fn version
(
mut self,
version: Version,
)
-> Self
{
self.version = version;
self
}
pub fn status
(
mut self,
status: Status,
)
-> Self
{
self.status = status;
self
}
pub fn content
(
mut self,
this: Content,
)
-> Self
{
let length = this.contentBody.len ( );
self.content = this.contentBody;
self.status = this.statusCode;
self
.addHeader
(
"Content-Type".to_owned(),
this.contentType.to_owned(),
)
.addHeader
(
"Content-Length".to_owned(),
format!
(
"{}",
length,
),
)
}
}