mirror of
https://github.com/actix/actix-web.git
synced 2024-11-10 19:01:05 +00:00
feat: Html responder (#3399)
This commit is contained in:
parent
0ce488e57a
commit
188206a903
5 changed files with 72 additions and 3 deletions
|
@ -19,8 +19,6 @@ Multipart form support for Actix Web.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
[More available in the examples repo →](https://github.com/actix/examples/tree/master/forms/multipart)
|
|
||||||
|
|
||||||
```rust
|
```rust
|
||||||
use actix_web::{post, App, HttpServer, Responder};
|
use actix_web::{post, App, HttpServer, Responder};
|
||||||
|
|
||||||
|
@ -58,6 +56,8 @@ async fn main() -> std::io::Result<()> {
|
||||||
|
|
||||||
<!-- cargo-rdme end -->
|
<!-- cargo-rdme end -->
|
||||||
|
|
||||||
|
[More available in the examples repo →](https://github.com/actix/examples/tree/master/forms/multipart)
|
||||||
|
|
||||||
Curl request :
|
Curl request :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
|
- Add `web::Html` responder.
|
||||||
- Add `HttpRequest::full_url()` method to get the complete URL of the request.
|
- Add `HttpRequest::full_url()` method to get the complete URL of the request.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
|
@ -109,4 +109,4 @@ This project is licensed under either of the following licenses, at your option:
|
||||||
|
|
||||||
## Code of Conduct
|
## Code of Conduct
|
||||||
|
|
||||||
Contribution to the actix-web repo is organized under the terms of the Contributor Covenant. The Actix team promises to intervene to uphold that code of conduct.
|
Contribution to the `actix/actix-web` repo is organized under the terms of the Contributor Covenant. The Actix team promises to intervene to uphold that code of conduct.
|
||||||
|
|
66
actix-web/src/types/html.rs
Normal file
66
actix-web/src/types/html.rs
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
//! Semantic HTML responder. See [`Html`].
|
||||||
|
|
||||||
|
use crate::{
|
||||||
|
http::{
|
||||||
|
header::{self, ContentType, TryIntoHeaderValue},
|
||||||
|
StatusCode,
|
||||||
|
},
|
||||||
|
HttpRequest, HttpResponse, Responder,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Semantic HTML responder.
|
||||||
|
///
|
||||||
|
/// When used as a responder, creates a 200 OK response, sets the correct HTML content type, and
|
||||||
|
/// uses the string passed to [`Html::new()`] as the body.
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// # use actix_web::web::Html;
|
||||||
|
/// Html::new("<p>Hello, World!</p>")
|
||||||
|
/// # ;
|
||||||
|
/// ```
|
||||||
|
#[derive(Debug, Clone, PartialEq, Hash)]
|
||||||
|
pub struct Html(String);
|
||||||
|
|
||||||
|
impl Html {
|
||||||
|
/// Constructs a new `Html` responder.
|
||||||
|
pub fn new(html: impl Into<String>) -> Self {
|
||||||
|
Self(html.into())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Responder for Html {
|
||||||
|
type Body = String;
|
||||||
|
|
||||||
|
fn respond_to(self, _req: &HttpRequest) -> HttpResponse<Self::Body> {
|
||||||
|
let mut res = HttpResponse::with_body(StatusCode::OK, self.0);
|
||||||
|
res.headers_mut().insert(
|
||||||
|
header::CONTENT_TYPE,
|
||||||
|
ContentType::html().try_into_value().unwrap(),
|
||||||
|
);
|
||||||
|
res
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use crate::test::TestRequest;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn responder() {
|
||||||
|
let req = TestRequest::default().to_http_request();
|
||||||
|
|
||||||
|
let res = Html::new("<p>Hello, World!</p>");
|
||||||
|
let res = res.respond_to(&req);
|
||||||
|
|
||||||
|
assert!(res.status().is_success());
|
||||||
|
assert!(res
|
||||||
|
.headers()
|
||||||
|
.get(header::CONTENT_TYPE)
|
||||||
|
.unwrap()
|
||||||
|
.to_str()
|
||||||
|
.unwrap()
|
||||||
|
.starts_with("text/html"));
|
||||||
|
assert!(res.body().starts_with("<p>"));
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,6 +3,7 @@
|
||||||
mod either;
|
mod either;
|
||||||
mod form;
|
mod form;
|
||||||
mod header;
|
mod header;
|
||||||
|
mod html;
|
||||||
mod json;
|
mod json;
|
||||||
mod path;
|
mod path;
|
||||||
mod payload;
|
mod payload;
|
||||||
|
@ -13,6 +14,7 @@ pub use self::{
|
||||||
either::Either,
|
either::Either,
|
||||||
form::{Form, FormConfig, UrlEncoded},
|
form::{Form, FormConfig, UrlEncoded},
|
||||||
header::Header,
|
header::Header,
|
||||||
|
html::Html,
|
||||||
json::{Json, JsonBody, JsonConfig},
|
json::{Json, JsonBody, JsonConfig},
|
||||||
path::{Path, PathConfig},
|
path::{Path, PathConfig},
|
||||||
payload::{Payload, PayloadConfig},
|
payload::{Payload, PayloadConfig},
|
||||||
|
|
Loading…
Reference in a new issue