1
0
Fork 0
mirror of https://github.com/actix/actix-web.git synced 2024-06-27 01:20:35 +00:00
Actix Web is a powerful, pragmatic, and extremely fast web framework for Rust.
Go to file
Aaron Hill 71c4bd1b30
Remove uses of Pin::new_unchecked in h1 Dispatcher (#1374)
This removes the last uses of unsafe `Pin` functions in actix-web.

This PR adds a `Pin<Box<_>>` wrapper to `DispatcherState::Upgrade`,
`State::ExpectCall`, and `State::ServiceCall`.

The previous uses of the futures `State::ExpectCall` and `State::ServiceCall`
were Undefined Behavior - a future was obtained from `self.expect.call`
or `self.service.call`, pinned on the stack, and then immediately
returned from `handle_request`. The only alternative to using `Box::pin`
would be to refactor `handle_request` to write the futures directly into
their final location, or avoid polling them before they are returned.

The previous use of `DispatcherState::Upgrade` doesn't seem to be
unsound. However, having data pinned inside an enum that we
`std::mem::replace` would require some careful `unsafe` code to ensure
that we never call `std::mem::replace` when the active variant contains
pinned data. By using `Box::pin`, we any possibility of future
refactoring accidentally introducing undefined behavior.

Co-authored-by: Yuki Okushi <huyuumi.dev@gmail.com>
2020-02-26 08:21:05 +09:00
.github Disable coverage for PRs 2020-02-14 07:31:29 +09:00
actix-cors allow to specify multi pattern for resources 2019-12-25 20:14:44 +04:00
actix-files Fix/suppress warnings 2020-02-08 02:20:01 +09:00
actix-framed prep actix-framed release 2019-12-25 20:17:22 +04:00
actix-http Remove uses of Pin::new_unchecked in h1 Dispatcher (#1374) 2020-02-26 08:21:05 +09:00
actix-identity Upgrade time to 0.2.5 (#1254) 2020-01-28 20:44:22 +09:00
actix-multipart Upgrade time to 0.2.5 (#1254) 2020-01-28 20:44:22 +09:00
actix-session Long lasting auto-prolonged session (#1292) 2020-01-29 10:26:39 +09:00
actix-web-actors update changes 2019-12-20 17:59:34 +06:00
actix-web-codegen Update CHANGES.md 2020-02-25 08:42:39 +09:00
awc Fix/suppress warnings 2020-02-08 02:20:01 +09:00
benches Add benchmark for full stack request lifecycle (#1298) 2020-01-25 08:05:25 +09:00
examples Fix/suppress warnings 2020-02-08 02:20:01 +09:00
src Create helper function for HTTP Trace Method 2020-02-23 09:25:55 +01:00
test-server actix-http-test: update time to 0.2.7 2020-02-23 07:08:50 +09:00
tests Use Pin<Box<S>> in BodyStream and SizedStream (#1328) 2020-01-31 09:39:34 +09:00
.appveyor.yml update deps 2018-10-08 21:58:37 -07:00
.gitignore start working on guide 2017-11-27 16:41:37 -08:00
Cargo.toml actix-web: update time to 0.2.7 2020-02-23 07:08:22 +09:00
CHANGES.md Merge branch 'master' into feat/helper-function-for-trace-method 2020-02-25 12:36:20 +09:00
CODE_OF_CONDUCT.md code of conduct 2018-01-21 15:29:02 -08:00
codecov.yml Remove codecoverage for tests and examples (#1299) 2020-01-24 05:10:02 +09:00
LICENSE-APACHE add mit license 2017-12-17 10:08:44 -08:00
LICENSE-MIT spelling check 2018-03-24 09:35:52 +03:00
MIGRATION.md allow explicit SameSite=None cookies (#1282) 2020-01-23 10:08:23 +09:00
README.md Add dependencies instruction (#1281) 2020-01-16 23:17:17 +09:00
rustfmt.toml copy actix-web2 2019-03-01 22:51:32 -08:00

Actix web

Actix web is a small, pragmatic, and extremely fast rust web framework

Build Status codecov crates.io Join the chat at https://gitter.im/actix/actix Documentation Download Version License

Website | Chat | Examples


Actix web is a simple, pragmatic and extremely fast web framework for Rust.

Example

Dependencies:

[dependencies]
actix-web = "2"
actix-rt = "1"

Code:

use actix_web::{get, web, App, HttpServer, Responder};

#[get("/{id}/{name}/index.html")]
async fn index(info: web::Path<(u32, String)>) -> impl Responder {
    format!("Hello {}! id:{}", info.1, info.0)
}

#[actix_rt::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(|| App::new().service(index))
        .bind("127.0.0.1:8080")?
        .run()
        .await
}

More examples

You may consider checking out this directory for more examples.

Benchmarks

License

This project is licensed under either of

at your option.

Code of Conduct

Contribution to the actix-web crate is organized under the terms of the Contributor Covenant, the maintainer of actix-web, @fafhrd91, promises to intervene to uphold that code of conduct.