Message

pub struct Message {
    pub protocol: String,
    pub status: String,
    pub headers: HashMap<String, String>,
    pub body: Vec<u8>,
}
Expand description

§A request message

Fields§

§protocol: String§status: String§headers: HashMap<String, String>§body: Vec<u8>

Implementations§

Source§

impl Message

Source

pub fn new( protocol: String, status: String, headers: HashMap<String, String>, body: Vec<u8>, ) -> Message

§Create a new HTTP Message
Examples found in repository?
examples/dynamic.rs (lines 89-94)
44    fn respond(
45        &self,
46        request_message: &request::Message,
47        _application: &Application,
48        _socket: &SocketAddr,
49        overflow_bytes: &u64,
50    ) -> Result<response::Message, String> {
51        if let Some(route) = &self.route {
52            let protocol =
53                request::Message::get_protocol_text(&request_message.request_line.protocol);
54            let mut headers: HashMap<String, String> = HashMap::new();
55            headers.insert("Content-Type".to_string(), "text/html".to_string());
56
57            let upload = match request_message.body {
58                BodyContentType::MultiPart(ref body) => match body.get(&"file".to_string()) {
59                    Some(value) => match String::from_utf8(value.body.clone()) {
60                        Ok(utf8_value) => utf8_value,
61                        _ => format!("no UTF-8 file data in: {:?}", &value.body),
62                    },
63                    _ => format!("no file data in {:?}", request_message),
64                },
65                _ => "no data".to_string(),
66            };
67
68            let upload2 = match request_message.body {
69                BodyContentType::MultiPart(ref body) => match body.get(&"file2".to_string()) {
70                    Some(value) => match String::from_utf8(value.body.clone()) {
71                        Ok(utf8_value) => utf8_value,
72                        _ => format!("no UTF-8 file data in: {:?}", &value.body),
73                    },
74                    _ => format!("no file data in {:?}", request_message),
75                },
76                _ => "no data".to_string(),
77            };
78
79            // NOTE uncomment to test concurrency
80            // thread::sleep(Duration::from_secs(2));
81
82            let mut overflow_upload = "Upload did not overflow server byte limit!";
83            if overflow_bytes > &0 {
84                overflow_upload = "Your upload exceeded server byte limit!";
85            }
86
87            let output = format!("<html><head><title>Milstian Internet Framework - Dynamic Example</title><link rel='stylesheet' href='/css/style.css' /></head><body><div class='wrapper'><h1>Milstian Web Framework</h1><img alt='' src='/img/logo1-modified.jpg' /><p><strong>Query argument:</strong> {}</p><div><strong>File upload 1:</strong><br /><pre>{}</pre></div><div><strong>File upload 2:</strong><br /><pre>{}</pre></div><h2>Dynamic Test</h2><form action='' method='post' enctype='multipart/form-data'><fieldset><legend>File upload</legend><div><label>Select file 1<br /><input type='file' name='file' /></label></div><div><label>Select file 2<br /><input type='file' name='file2' /></label></div><p>{}</p><div><input type='submit' value='Upload' /></div></fieldset></form></div></body></html>", route, &upload, &upload2, &overflow_upload);
88
89            return Ok(response::Message::new(
90                protocol.to_string(),
91                "200 OK".to_string(),
92                headers,
93                output.as_bytes().to_vec(),
94            ));
95        } else {
96            Err("No result".to_string())
97        }
98    }
Source

pub fn header_to_string(&self) -> String

§Get the HTTP header as a new string
use milstian_http::response::Message;
use std::collections::HashMap;
assert_eq!(
    Message::new(
        "HTTP/1.0".to_string(),
        "200 OK".to_string(),
        HashMap::new(),
        b"<html><body>Nothing here</body></html>".to_vec()
    ).header_to_string(),
    "HTTP/1.0 200 OK\r\n\r\n".to_string()
);    
Source

pub fn to_string(&mut self) -> String

§Convert response message into a string
use milstian_http::response::Message;
use std::collections::HashMap;
assert_eq!(
    Message::new(
        "HTTP/1.0".to_string(),
        "200 OK".to_string(),
        HashMap::new(),
        b"<html><body>Nothing here</body></html>".to_vec()
    ).to_string(),
    "HTTP/1.0 200 OK\r\n\r\n<html><body>Nothing here</body></html>".to_string()
);
Source

pub fn to_bytes(&mut self) -> Vec<u8>

§Convert message into bytes
use milstian_http::response::Message;
use std::collections::HashMap;
assert_eq!(
    Message::new(
        "HTTP/1.0".to_string(),
        "200 OK".to_string(),
        HashMap::new(),
        b"<html><body>Nothing here</body></html>".to_vec()
    ).to_bytes(),
    b"HTTP/1.0 200 OK\r\n\r\n<html><body>Nothing here</body></html>".to_vec()
);

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.