Struct Response

Source
pub struct Response { /* private fields */ }

Implementations§

Source§

impl Response

Source

pub fn new(stream: TcpStream) -> Response

Source

pub fn status_code(self, status_code: StatusCode) -> Header

Examples found in repository?
examples/body.rs (line 14)
12fn say_hi(request: Request, response: Response) -> io::Result<()> {
13    if request.body.is_empty() {
14        response.status_code(StatusCode::BadRequest)
15        .set_header("Content-Type", "text/html").flush()?
16        .add_to_body("<h1>400 Bad Request</h1>")
17        .add_to_body("<p>No message was delivered via body</p>").flush()?;
18        
19        return Ok(());
20    };
21
22    let content = format!("{{ \"message\": \"{}\" }}", request.body);
23
24    response.json(content)?;
25
26    Ok(())
27}
28
29fn not_found(request: Request, response: Response) -> io::Result<()> {
30    let content = format!("<p>Page '{}' could not been found</p>", request.uri);
31
32    response.status_code(StatusCode::NotFound)
33    .set_header("Content-Type", "text/html").flush()?
34    .add_to_body("<h1>404 Not Found</h1>")
35    .add_to_body(content).flush()?;
36
37    Ok(())
38}
More examples
Hide additional examples
examples/hello_world.rs (line 20)
7fn main() -> io::Result<()> {
8    let listener = TcpListener::bind("127.0.0.1:8080")?;
9
10    for stream in listener.incoming().filter_map(Result::ok) {
11        let (request, response) = Http::from(stream)?;
12
13        println!("New Request: ");
14        println!("- method:          {:?}", request.method);
15        println!("- uri:             {:?}", request.uri);
16        println!("- params:          {:?}", request.params);
17        println!("- http_version:    {:?}", request.http_version);
18        println!("- headers:         {:?}", request.headers);
19
20        response.status_code(StatusCode::Ok)
21        .set_header("Content-Type", "text/html").flush()?
22        .add_to_body("<h1>Hello from Rust!</h1>").flush()?;
23    }
24
25    Ok(())
26}
examples/quick_responses.rs (line 33)
31fn add(request: Request, response: Response) -> io::Result<()> {
32    let Some(a) = request.params.get("a") else {
33        response.status_code(StatusCode::BadRequest)
34                .html(&DIALOG_A_NOT_FOUND)?;
35        
36        return Ok(());
37    };
38
39    let Some(b) = request.params.get("b") else {
40        response.status_code(StatusCode::BadRequest)
41                .html(&DIALOG_B_NOT_FOUND)?;
42        
43        return Ok(());
44    };
45
46    let Ok(a) = a.parse::<u8>() else {
47        response.status_code(StatusCode::BadRequest)
48                .html(&DIALOG_A_INVALID)?;
49        
50        return Ok(());
51    };
52
53    let Ok(b) = b.parse::<u8>() else {
54        response.status_code(StatusCode::BadRequest)
55                .html(&DIALOG_B_INVALID)?;
56        return Ok(());
57    };
58
59    let content = format!("<h1>{} + {} = {}</h1>", a, b, a as u16 + b as u16);
60
61    response.html(content)?;
62
63    Ok(())
64}
65
66fn sub(request: Request, response: Response) -> io::Result<()> {
67    let Some(a) = request.params.get("a") else {
68        response.status_code(StatusCode::BadRequest)
69                .html(&DIALOG_A_NOT_FOUND)?;
70        
71        return Ok(());
72    };
73
74    let Some(b) = request.params.get("b") else {
75        response.status_code(StatusCode::BadRequest)
76                .html(&DIALOG_B_NOT_FOUND)?;
77        
78        return Ok(());
79    };
80
81    let Ok(a) = a.parse::<u8>() else {
82        response.status_code(StatusCode::BadRequest)
83                .html(&DIALOG_A_INVALID)?;
84        
85        return Ok(());
86    };
87
88    let Ok(b) = b.parse::<u8>() else {
89        response.status_code(StatusCode::BadRequest)
90                .html(&DIALOG_B_INVALID)?;
91        return Ok(());
92    };
93
94    let content = format!("<h1>{} - {} = {}</h1>", a, b, a as i16 - b as i16);
95    
96    response.html(content)?;
97
98    Ok(())
99}
100
101fn not_found(request: Request, response: Response) -> io::Result<()> {
102    let content = format!("
103        <h1>400 Bad Request</h1>
104        <p>Page '{}' could not been found</p>
105    ", request.uri);
106
107    response.status_code(StatusCode::NotFound)
108            .html(content)?;
109
110    Ok(())
111}
examples/calculator.rs (line 13)
11fn add(request: Request, response: Response) -> io::Result<()> {
12    let Some(a) = request.params.get("a") else {
13        response.status_code(StatusCode::BadRequest)
14        .set_header("Content-Type", "text/html").flush()?
15        .add_to_body("<h1>400 Bad Request</h1>")
16        .add_to_body("<p>Parameter 'a' not found</p>").flush()?;
17        
18        return Ok(());
19    };
20
21    let Some(b) = request.params.get("b") else {
22        response.status_code(StatusCode::BadRequest)
23        .set_header("Content-Type", "text/html").flush()?
24        .add_to_body("<h1>400 Bad Request</h1>")
25        .add_to_body("<p>Parameter 'b' not found</p>").flush()?;
26        
27        return Ok(());
28    };
29
30    let Ok(a) = a.parse::<u8>() else {
31        response.status_code(StatusCode::BadRequest)
32        .set_header("Content-Type", "text/html").flush()?
33        .add_to_body("<h1>400 Bad Request</h1>")
34        .add_to_body("<p>Parameter 'a' can only be a number from 0 to 255</p>").flush()?;
35        
36        return Ok(());
37    };
38
39    let Ok(b) = b.parse::<u8>() else {
40        response.status_code(StatusCode::BadRequest)
41        .set_header("Content-Type", "text/html").flush()?
42        .add_to_body("<h1>400 Bad Request</h1>")
43        .add_to_body("<p>Parameter 'b' can only be a number from 0 to 255</p>").flush()?;
44        
45        return Ok(());
46    };
47
48    let content = format!("<h1>{} + {} = {}</h1>", a, b, a as u16 + b as u16);
49
50    response.status_code(StatusCode::Ok)
51    .set_header("Content-Type", "text/html").flush()?
52    .add_to_body(content).flush()?;
53
54    Ok(())
55}
56
57fn sub(request: Request, response: Response) -> io::Result<()> {
58    let Some(a) = request.params.get("a") else {
59        response.status_code(StatusCode::BadRequest)
60        .set_header("Content-Type", "text/html").flush()?
61        .add_to_body("<h1>400 Bad Request</h1>")
62        .add_to_body("<p>Parameter 'a' not found</p>").flush()?;
63        
64        return Ok(());
65    };
66
67    let Some(b) = request.params.get("b") else {
68        response.status_code(StatusCode::BadRequest)
69        .set_header("Content-Type", "text/html").flush()?
70        .add_to_body("<h1>400 Bad Request</h1>")
71        .add_to_body("<p>Parameter 'b' not found</p>").flush()?;
72        
73        return Ok(());
74    };
75
76    let Ok(a) = a.parse::<u8>() else {
77        response.status_code(StatusCode::BadRequest)
78        .set_header("Content-Type", "text/html").flush()?
79        .add_to_body("<h1>400 Bad Request</h1>")
80        .add_to_body("<p>Parameter 'a' can only be a number from 0 to 255</p>").flush()?;
81        
82        return Ok(());
83    };
84
85    let Ok(b) = b.parse::<u8>() else {
86        response.status_code(StatusCode::BadRequest)
87        .set_header("Content-Type", "text/html").flush()?
88        .add_to_body("<h1>400 Bad Request</h1>")
89        .add_to_body("<p>Parameter 'b' can only be a number from 0 to 255</p>").flush()?;
90        
91        return Ok(());
92    };
93
94    let content = format!("<h1>{} - {} = {}</h1>", a, b, a as i16 - b as i16);
95
96    response.status_code(StatusCode::Ok)
97    .set_header("Content-Type", "text/html").flush()?
98    .add_to_body(content).flush()?;
99
100    Ok(())
101}
102
103fn not_found(request: Request, response: Response) -> io::Result<()> {
104    let content = format!("<p>Page '{}' could not been found</p>", request.uri);
105
106    response.status_code(StatusCode::NotFound)
107    .set_header("Content-Type", "text/html").flush()?
108    .add_to_body("<h1>404 Not Found</h1>")
109    .add_to_body(content).flush()?;
110
111    Ok(())
112}
Source

pub fn text<T: Display>(self, text: T) -> Result<()>

Source

pub fn html<H: Display>(self, html: H) -> Result<()>

Examples found in repository?
examples/quick_responses.rs (line 61)
31fn add(request: Request, response: Response) -> io::Result<()> {
32    let Some(a) = request.params.get("a") else {
33        response.status_code(StatusCode::BadRequest)
34                .html(&DIALOG_A_NOT_FOUND)?;
35        
36        return Ok(());
37    };
38
39    let Some(b) = request.params.get("b") else {
40        response.status_code(StatusCode::BadRequest)
41                .html(&DIALOG_B_NOT_FOUND)?;
42        
43        return Ok(());
44    };
45
46    let Ok(a) = a.parse::<u8>() else {
47        response.status_code(StatusCode::BadRequest)
48                .html(&DIALOG_A_INVALID)?;
49        
50        return Ok(());
51    };
52
53    let Ok(b) = b.parse::<u8>() else {
54        response.status_code(StatusCode::BadRequest)
55                .html(&DIALOG_B_INVALID)?;
56        return Ok(());
57    };
58
59    let content = format!("<h1>{} + {} = {}</h1>", a, b, a as u16 + b as u16);
60
61    response.html(content)?;
62
63    Ok(())
64}
65
66fn sub(request: Request, response: Response) -> io::Result<()> {
67    let Some(a) = request.params.get("a") else {
68        response.status_code(StatusCode::BadRequest)
69                .html(&DIALOG_A_NOT_FOUND)?;
70        
71        return Ok(());
72    };
73
74    let Some(b) = request.params.get("b") else {
75        response.status_code(StatusCode::BadRequest)
76                .html(&DIALOG_B_NOT_FOUND)?;
77        
78        return Ok(());
79    };
80
81    let Ok(a) = a.parse::<u8>() else {
82        response.status_code(StatusCode::BadRequest)
83                .html(&DIALOG_A_INVALID)?;
84        
85        return Ok(());
86    };
87
88    let Ok(b) = b.parse::<u8>() else {
89        response.status_code(StatusCode::BadRequest)
90                .html(&DIALOG_B_INVALID)?;
91        return Ok(());
92    };
93
94    let content = format!("<h1>{} - {} = {}</h1>", a, b, a as i16 - b as i16);
95    
96    response.html(content)?;
97
98    Ok(())
99}
Source

pub fn json<J: Display>(self, json: J) -> Result<()>

Examples found in repository?
examples/body.rs (line 24)
12fn say_hi(request: Request, response: Response) -> io::Result<()> {
13    if request.body.is_empty() {
14        response.status_code(StatusCode::BadRequest)
15        .set_header("Content-Type", "text/html").flush()?
16        .add_to_body("<h1>400 Bad Request</h1>")
17        .add_to_body("<p>No message was delivered via body</p>").flush()?;
18        
19        return Ok(());
20    };
21
22    let content = format!("{{ \"message\": \"{}\" }}", request.body);
23
24    response.json(content)?;
25
26    Ok(())
27}

Trait Implementations§

Source§

impl Debug for Response

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Send for Response

Source§

impl Sync for Response

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.