PageSourceSearch

https://actix.rs/assets/js/d589d3a7.2eab9d90.js

js actix.rs collected 2026-09-25 14:05:22 UTC 92,569 bytes, 1 lines download raw bytes

1(globalThis.webpackChunkactix_website||=[]).push([[7924],{75739(e,n,t){const r={"./application/Cargo.toml":35806,"./application/src/app.rs":82541,"./application/src/combine.rs":54695,"./application/src/config.rs":35142,"./application/src/main.rs":95185,"./application/src/mutable_state.rs":4906,"./application/src/scope.rs":87262,"./application/src/state.rs":48039,"./application/src/vh.rs":77954,"./async-handlers/Cargo.toml":84820,"./async-handlers/src/main.rs":84403,"./async-handlers/src/stream.rs":38178,"./databases/Cargo.toml":97106,"./databases/src/main.rs":32789,"./easy-form-handling/Cargo.toml":88681,"./easy-form-handling/src/main.rs":63800,"./either/Cargo.toml":29619,"./either/src/main.rs":96854,"./errors/Cargo.toml":34841,"./errors/src/helpers.rs":69172,"./errors/src/logging.rs":104,"./errors/src/main.rs":53896,"./errors/src/override_error.rs":74116,"./errors/src/recommend_one.rs":23988,"./errors/src/recommend_two.rs":14122,"./extractors/Cargo.toml":21135,"./extractors/src/form.rs":95509,"./extractors/src/form_optional.rs":27636,"./extractors/src/json_one.rs":35114,"./extractors/src/json_two.rs":52464,"./extractors/src/main.rs":84242,"./extractors/src/multiple.rs":29391,"./extractors/src/path_one.rs":47639,"./extractors/src/path_three.rs":4771,"./extractors/src/path_two.rs":59993,"./extractors/src/query.rs":72559,"./flexible-responders/Cargo.toml":67141,"./flexible-responders/src/main.rs":88884,"./getting-started/Cargo.toml":11308,"./getting-started/src/main.rs":57467,"./http2/Cargo.toml":69294,"./http2/src/main.rs":5953,"./main-example/Cargo.toml":8768,"./main-example/src/main.rs":13887,"./middleware/Cargo.toml":45310,"./middleware/src/default_headers.rs":90802,"./middleware/src/errorhandler.rs":94586,"./middleware/src/from_fn.rs":53351,"./middleware/src/logger.rs":42380,"./middleware/src/main.rs":2673,"./middleware/src/user_sessions.rs":77175,"./middleware/src/wrap_fn.rs":53283,"./powerful-extractors/Cargo.toml":19886,"./powerful-extractors/src/main.rs":2561,"./request-handlers/Cargo.toml":92895,"./request-handlers/src/handlers_arc.rs":39529,"./request-handlers/src/main.rs":15970,"./request-routing/Cargo.toml":80006,"./request-routing/src/main.rs":58889,"./requests/Cargo.toml":25036,"./requests/src/main.rs":66619,"./requests/src/manual.rs":10012,"./requests/src/multipart.rs":60716,"./requests/src/streaming.rs":43588,"./requests/src/urlencoded.rs":73179,"./responder-trait/Cargo.toml":47327,"./responder-trait/src/main.rs":11618,"./responses/Cargo.toml":93792,"./responses/src/auto.rs":84417,"./responses/src/chunked.rs":89192,"./responses/src/identity.rs":80496,"./responses/src/identity_two.rs":65793,"./responses/src/json_resp.rs":39953,"./responses/src/main.rs":6271,"./sea-orm-databases/Cargo.toml":99325,"./sea-orm-databases/src/main.rs":31452,"./sea-orm-databases/src/mod.rs":83261,"./sea-orm-databases/src/prelude.rs":96092,"./sea-orm-databases/src/users.rs":14193,"./server/Cargo.toml":98697,"./server/src/keep_alive.rs":33578,"./server/src/keep_alive_tp.rs":83921,"./server/src/main.rs":21048,"./server/src/signals.rs":53936,"./server/src/ssl.rs":48435,"./server/src/workers.rs":17686,"./static-files/Cargo.toml":59358,"./static-files/src/configuration.rs":49148,"./static-files/src/configuration_two.rs":20125,"./static-files/src/directory.rs":49553,"./static-files/src/main.rs":14449,"./testing/Cargo.toml":32736,"./testing/src/integration_one.rs":85233,"./testing/src/integration_two.rs":41635,"./testing/src/main.rs":2367,"./testing/src/stream_response.rs":72810,"./url-dispatch/Cargo.toml":584,"./url-dispatch/src/cfg.rs":25730,"./url-dispatch/src/dhandler.rs":49454,"./url-dispatch/src/guard.rs":37385,"./url-dispatch/src/guard2.rs":64339,"./url-dispatch/src/main.rs":96599,"./url-dispatch/src/minfo.rs":43171,"./url-dispatch/src/norm.rs":5412,"./url-dispatch/src/norm2.rs":48116,"./url-dispatch/src/path.rs":16713,"./url-dispatch/src/path2.rs":31123,"./url-dispatch/src/pbuf.rs":97103,"./url-dispatch/src/resource.rs":63046,"./url-dispatch/src/scope.rs":36408,"./url-dispatch/src/url_ext.rs":17401,"./url-dispatch/src/urls.rs":43652,"./websockets/Cargo.toml":41894,"./websockets/src/main.rs":32553};function s(e){const n=a(e);return t(n)}function a(e){if(!t.o(r,e)){const n=new Error("Cannot find module '"+e+"'");throw n.code="MODULE_NOT_FOUND",n}return r[e]}s.keys=function(){return Object.keys(r)},s.resolve=a,e.exports=s,s.id=75739},89252(e,n,t){"use strict";t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>u,default:()=>m,frontMatter:()=>d,metadata:()=>r,toc:()=>l});const r=JSON.parse('{"id":"getting-started","title":"Getting Started","description":"Installing Rust","source":"@site/docs/getting-started.md","sourceDirName":".","slug":"/getting-started","permalink":"/docs/getting-started","draft":false,"unlisted":false,"editUrl":"https://github.com/actix/actix-website/edit/main/docs/getting-started.md","tags":[],"version":"current","frontMatter":{"title":"Getting Started"},"sidebar":"docs","previous":{"title":"What is Actix Web","permalink":"/docs/whatis"},"next":{"title":"Application","permalink":"/docs/application"}}');var s=t(91987),a=t(67008),i=t(18828),o=t(93196),p=t(53097);const d={title:"Getting Started"},u=void 0,c={},l=[{value:"Installing Rust",id:"installing-rust",level:2},{value:"Hello, world!",id:"hello-world",level:2}];function w(e){const n={a:"a",code:"code",h2:"h2",p:"p",pre:"pre",...(0,a.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"installing-rust",children:"Installing Rust"}),"\n",(0,s.jsxs)(n.p,{children:["If you don't have Rust yet, we recommend you use ",(0,s.jsx)(n.code,{children:"rustup"})," to manage your Rust installation. The ",(0,s.jsx)(n.a,{href:"https://doc.rust-lang.org/book/ch01-01-installation.html",children:"official rust guide"})," has a wonderful section on getting started."]}),"\n",(0,s.jsx)("p",{children:(0,s.jsxs)(n.p,{children:["Actix Web currently has a minimum supported Rust version (MSRV) of ",p.A.rustVersion,". Running ",(0,s.jsx)("code",{children:"rustup update"})," will ensure you have the latest and greatest Rust version available. As such, this guide assumes you are running Rust ",p.A.rustVersion," or later."]})}),"\n",(0,s.jsx)(n.h2,{id:"hello-world",children:"Hello, world!"}),"\n",(0,s.jsx)(n.p,{children:"Start by creating a new binary-based Cargo project and changing into the new directory:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cargo new hello-world\ncd hello-world\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Add ",(0,s.jsx)(n.code,{children:"actix-web"})," as a dependency of your project by adding the following to your ",(0,s.jsx)(n.code,{children:"Cargo.toml"})," file."]}),"\n",(0,s.jsx)(i.A,{className:"language-toml",children:`[dependencies]\nactix-web = "${p.A.actixWebMajorVersion}"`}),"\n",(0,s.jsxs)(n.p,{children:["Request handlers use async functions that accept zero or more parameters. These parameters can be extracted from a request (see ",(0,s.jsx)(n.code,{children:"FromRequest"})," trait), and the function returns a type that can be converted into an ",(0,s.jsx)(n.code,{children:"HttpResponse"})," (see ",(0,s.jsx)(n.code,{children:"Responder"})," trait):"]}),"\n",(0,s.jsxs)(n.p,{children:["Replace the contents of ",(0,s.jsx)(n.code,{children:"src/main.rs"})," with the following:"]}),"\n",(0,s.jsx)(o.A,{example:"getting-started",section:"handlers"}),"\n",(0,s.jsxs)(n.p,{children:["Notice that some of these handlers have routing information attached directly using the built-in macros. These allow you to specify the method and path that the handler should respond to. You will see below how to register ",(0,s.jsx)(n.code,{children:"manual_hello"})," (i.e. routes that do not use a routing macro)."]}),"\n",(0,s.jsxs)(n.p,{children:["Next, create an ",(0,s.jsx)(n.code,{children:"App"})," instance and register the request handlers. Use ",(0,s.jsx)(n.code,{children:"App::service"})," for the handlers using routing macros and ",(0,s.jsx)(n.code,{children:"App::route"})," for manually routed handlers, declaring the path and method. Finally, the app is started inside an ",(0,s.jsx)(n.code,{children:"HttpServer"})," which will serve incoming requests using your ",(0,s.jsx)(n.code,{children:"App"}),' as an "application factory".']}),"\n",(0,s.jsxs)(n.p,{children:["Further append the following ",(0,s.jsx)(n.code,{children:"main"})," function to ",(0,s.jsx)(n.code,{children:"src/main.rs"}),":"]}),"\n",(0,s.jsx)(o.A,{example:"getting-started",section:"main"}),"\n",(0,s.jsxs)(n.p,{children:["That's it! Compile and run the program with ",(0,s.jsx)(n.code,{children:"cargo run"}),". The ",(0,s.jsx)(n.code,{children:"#[actix_web::main]"})," macro executes the async main function within the actix runtime. Now you can go to ",(0,s.jsx)(n.code,{children:"http://127.0.0.1:8080/"})," or any of the other routes you defined to see the results."]})]})}function m(e={}){const{wrapper:n}={...(0,a.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(w,{...e})}):w(e)}},93196(e,n,t){"use strict";var r=t(18828),s=t(91987);const a=t(75739),i=({example:e,file:n,section:t,language:i})=>{const o="manifest"===n?"Cargo.toml":`src/${n??"main.rs"}`,p=a(`./${e}/${o}`).default,d=p.match(new RegExp(`(?://|#) <${t}>\n([\\s\\S]*)(?://|#) </${t}>`))?.[1];if(void 0===d)throw new Error(`Missing code section "${t}" in ${e}/${o}`);return(0,s.jsx)(r.A,{className:`language-${i??"rust"}`,children:d})};t.d(n,["A",0,i])},53097(e,n,t){"use strict";const r={rustVersion:"1.72",actixWebMajorVersion:"4",tokioMajorVersion:"1",actorsMajorVersion:"0.13"};t.d(n,["A",0,r])},35806(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "application"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\n'])},82541(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'#![allow(dead_code)]\n\n// <setup>\nuse actix_web::{web, App, HttpServer, Responder};\n\nasync fn index() -> impl Responder {\n    "Hello world!"\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new().service(\n            // prefixes all resources and routes attached to it...\n            web::scope("/app")\n                // ...so this handles requests for `GET /app/index.html`\n                .route("/index.html", web::get().to(index)),\n        )\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </setup>\n'])},54695(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'#![allow(dead_code)]\n\nuse actix_web::{web, App, HttpResponse, HttpServer};\n\n// <combine>\nstruct State1;\nstruct State2;\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .service(\n                web::scope("/app1")\n                    .app_data(web::Data::new(State1
1))\n                    .route("/", web::to(HttpResponse::Ok)),\n            )\n            .service(\n                web::scope("/app2")\n                    .app_data(web::Data::new(State2))\n                    .route("/", web::to(HttpResponse::Ok)),\n            )\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </combine>\n'])},35142(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'#![allow(dead_code)]\n\n// <config>\nuse actix_web::{web, App, HttpResponse, HttpServer};\n\n// this function could be located in a different module\nfn scoped_config(cfg: &mut web::ServiceConfig) {\n    cfg.service(\n        web::resource("/test")\n            .route(web::get().to(|| async { HttpResponse::Ok().body("test") }))\n            .route(web::head().to(HttpResponse::MethodNotAllowed)),\n    );\n}\n\n// this function could be located in a different module\nfn config(cfg: &mut web::ServiceConfig) {\n    cfg.service(\n        web::resource("/app")\n            .route(web::get().to(|| async { HttpResponse::Ok().body("app") }))\n            .route(web::head().to(HttpResponse::MethodNotAllowed)),\n    );\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .configure(config)\n            .service(web::scope("/api").configure(scoped_config))\n            .route(\n                "/",\n                web::get().to(|| async { HttpResponse::Ok().body("/") }),\n            )\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </config>\n'])},95185(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use actix_web::{web, App, HttpResponse, HttpServer};\n\npub mod app;\npub mod combine;\npub mod config;\npub mod scope;\npub mod state;\npub mod vh;\n\n// <multi>\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .service(web::scope("/app1").route("/", web::to(HttpResponse::Ok)))\n            .service(web::scope("/app2").route("/", web::to(HttpResponse::Ok)))\n            .route("/", web::to(HttpResponse::Ok))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </multi>\n'])},4906(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <setup_mutable>\nuse actix_web::{web, App, HttpServer};\nuse std::sync::Mutex;\n\nstruct AppStateWithCounter {\n    counter: Mutex<i32>, // <- Mutex is necessary to mutate safely across threads\n}\n\nasync fn index(data: web::Data<AppStateWithCounter>) -> String {\n    let mut counter = data.counter.lock().unwrap(); // <- get counter\'s MutexGuard\n    *counter += 1; // <- access counter inside MutexGuard\n\n    format!("Request number: {counter}") // <- response with count\n}\n// </setup_mutable>\n\n// <make_app_mutable>\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    // Note: web::Data created _outside_ HttpServer::new closure\n    let counter = web::Data::new(AppStateWithCounter {\n        counter: Mutex::new(0),\n    });\n\n    HttpServer::new(move || {\n        // move counter into the closure\n        App::new()\n            .app_data(counter.clone()) // <- register the created data\n            .route("/", web::get().to(index))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </make_app_mutable>\n'])},87262(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use actix_web::{get, web, App, HttpRequest, Responder};\n\n#[get("/show")]\nasync fn show_users(_req: HttpRequest) -> impl Responder {\n    "unimplemented!"\n}\n\n// <scope>\n#[actix_web::main]\nasync fn main() {\n    let scope = web::scope("/users").service(show_users);\n    App::new().service(scope);\n}\n// </scope>\n'])},48039(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <setup>\nuse actix_web::{get, web, App, HttpServer};\n\n// This struct represents state\nstruct AppState {\n    app_name: String,\n}\n\n#[get("/")]\nasync fn index(data: web::Data<AppState>) -> String {\n    let app_name = &data.app_name; // <- get app_name\n    format!("Hello {app_name}!") // <- response with app_name\n}\n// </setup>\n\n// <start_app>\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .app_data(web::Data::new(AppState {\n                app_name: String::from("Actix Web"),\n            }))\n            .service(index)\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </start_app>\n'])},77954(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use actix_web::{guard, web, App, HttpResponse, HttpServer};\n\n// <vh>\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .service(\n                web::scope("/")\n                    .guard(guard::Host("www.rust-lang.org"))\n                    .route("", web::to(|| async { HttpResponse::Ok().body("www") })),\n            )\n            .service(\n                web::scope("/")\n                    .guard(guard::Host("users.rust-lang.org"))\n                    .route("", web::to(|| async { HttpResponse::Ok().body("user") })),\n            )\n            .route("/", web::to(HttpResponse::Ok))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </vh>\n'])},84820(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "async-handlers"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\nfutures = "0.3"\n'])},84403(e,n,t){"use strict";t.r(n);t.d(n,["default",0,"pub mod stream;\n\nfn main() {}\n"])},38178(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <stream>\nuse actix_web::{get, web, App, Error, HttpResponse, HttpServer};\nuse futures::{future::ok, stream::once};\n\n#[get("/stream")]\nasync fn stream() -> HttpResponse {\n    let body = once(ok::<_, Error>(web::Bytes::from_static(b"test")));\n\n    HttpResponse::Ok()\n        .content_type("application/json")\n        .streaming(body)\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(stream))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </stream>\n'])},97106(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "databases"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\ndiesel = { version = "2", features = ["sqlite", "r2d2"] }\nserde = { version = "1", features = ["derive"] }\nuuid = { version = "1", features = ["v4"] }\n'])},32789(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use std::io;\n\nuse actix_web::{error, web, App, HttpResponse, HttpServer, Responder};\nuse diesel::{prelude::*, r2d2, Insertable, Queryable, SqliteConnection};\nuse serde::Serialize;\n\nmod schema {\n    diesel::table! {\n        users {\n            id -> VarChar,\n            name -> VarChar,\n        }\n    }\n}\n\n#[derive(Debug, Serialize, Queryable)]\nstruct User {\n    id: String,\n    name: String,\n}\n\n// <handler>\n#[derive(Debug, Insertable)]\n#[diesel(table_name = self::schema::users)]\nstruct NewUser<\'a> {\n    id: &\'a str,\n    name: &\'a str,\n}\n\nfn insert_new_user(\n    conn: &mut SqliteConnection,\n    user_name: String,\n) ->
1 diesel::QueryResult<User> {\n    use crate::schema::users::dsl::*;\n\n    // Create insertion model\n    let uid = format!("{}", uuid::Uuid::new_v4());\n    let new_user = NewUser {\n        id: &uid,\n        name: &user_name,\n    };\n\n    // normal diesel operations\n    diesel::insert_into(users)\n        .values(&new_user)\n        .execute(conn)\n        .expect("Error inserting person");\n\n    let user = users\n        .filter(id.eq(&uid))\n        .first::<User>(conn)\n        .expect("Error loading person that was just inserted");\n\n    Ok(user)\n}\n// </handler>\n\n// <main>\ntype DbPool = r2d2::Pool<r2d2::ConnectionManager<SqliteConnection>>;\n\n#[actix_web::main]\nasync fn main() -> io::Result<()> {\n    // connect to SQLite DB\n    let manager = r2d2::ConnectionManager::<SqliteConnection>::new("app.db");\n    let pool = r2d2::Pool::builder()\n        .build(manager)\n        .expect("database URL should be valid path to SQLite DB file");\n\n    // start HTTP server on port 8080\n    HttpServer::new(move || {\n        App::new()\n            .app_data(web::Data::new(pool.clone()))\n            .route("/{name}", web::get().to(index))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </main>\n\n// <index>\nasync fn index(\n    pool: web::Data<DbPool>,\n    name: web::Path<(String,)>,\n) -> actix_web::Result<impl Responder> {\n    let (name,) = name.into_inner();\n\n    let user = web::block(move || {\n        // Obtaining a connection from the pool is also a potentially blocking operation.\n        // So, it should be called within the `web::block` closure, as well.\n        let mut conn = pool.get().expect("couldn\'t get db connection from pool");\n\n        insert_new_user(&mut conn, name)\n    })\n    .await?\n    .map_err(error::ErrorInternalServerError)?;\n\n    Ok(HttpResponse::Ok().json(user))\n}\n// </index>\n'])},88681(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "easy-form-handling"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\nserde = { version = "1", features = ["derive"] }\n'])},63800(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use actix_web::{web, App, HttpResponse, HttpServer, Responder};\nuse serde::Deserialize;\nuse actix_web::web::{Either, Json, Form};\n\n// <easy-form-handling>\n#[derive(Deserialize)]\nstruct Register {\n    username: String,\n    country: String,\n}\n\n// register form is JSON\nasync fn json_register(form: web::Json<Register>) -> impl Responder {\n    format!("Hello {} from {}!", form.username, form.country)\n}\n\n// register form can be either JSON or URL-encoded\nasync fn register(form: Either<Json<Register>, Form<Register>>) -> impl Responder {\n    let Register { username, country } = form.into_inner();\n    format!("Hello {username} from {country}!")\n}\n// </easy-form-handling>\n\nasync fn index() -> HttpResponse {\n    HttpResponse::Ok()\n        .content_type("text/html; charset=utf-8")\n        .body(include_str!("../static/form.html"))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .route("/", web::get().to(index))\n            .route("/register", web::post().to(register))\n            .route("/json_register", web::post().to(json_register))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n'])},29619(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "either"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\n'])},96854(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <either>\nuse actix_web::{Either, Error, HttpResponse};\n\ntype RegisterResult = Either<HttpResponse, Result<&\'static str, Error>>;\n\nasync fn index() -> RegisterResult {\n    if is_a_variant() {\n        // choose Left variant\n        Either::Left(HttpResponse::BadRequest().body("Bad data"))\n    } else {\n        // choose Right variant\n        Either::Right(Ok("Hello!"))\n    }\n}\n// </either>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{web, App, HttpServer};\n\n    HttpServer::new(|| App::new().route("/", web::get().to(index)))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n\nfn is_a_variant() -> bool {\n    true\n}\n'])},34841(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "my_errors"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\nderive_more = { version = "2", features = ["display", "error"] }\nenv_logger = "0.11"\nlog = "0.4"\n'])},69172(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <helpers>\nuse actix_web::{error, get, App, HttpServer};\n\n#[derive(Debug)]\nstruct MyError {\n    name: &\'static str,\n}\n\n#[get("/")]\nasync fn index() -> actix_web::Result<String> {\n    let result = Err(MyError { name: "test error" });
1\n\n    result.map_err(|err| error::ErrorBadRequest(err.name))\n}\n// </helpers>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n'])},104(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <logging>\nuse actix_web::{error, get, middleware::Logger, App, HttpServer, Result};\nuse derive_more::derive::{Display, Error};\nuse log::info;\n\n#[derive(Debug, Display, Error)]\n#[display("my error: {name}")]\npub struct MyError {\n    name: &\'static str,\n}\n\n// Use default implementation for `error_response()` method\nimpl error::ResponseError for MyError {}\n\n#[get("/")]\nasync fn index() -> Result<&\'static str, MyError> {\n    let err = MyError { name: "test error" };\n    info!("{}", err);\n    Err(err)\n}\n\n#[rustfmt::skip]\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    unsafe {\n        std::env::set_var("RUST_LOG", "info");\n        std::env::set_var("RUST_BACKTRACE", "1");\n    }\n    env_logger::init();\n\n    HttpServer::new(|| {\n        let logger = Logger::default();\n\n        App::new()\n            .wrap(logger)\n            .service(index)\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </logging>\n'])},53896(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'pub mod helpers;\npub mod logging;\npub mod override_error;\npub mod recommend_one;\npub mod recommend_two;\n\n// <response-error>\nuse actix_web::{error, Result};\nuse derive_more::derive::{Display, Error};\n\n#[derive(Debug, Display, Error)]\n#[display("my error: {name}")]\nstruct MyError {\n    name: &\'static str,\n}\n\n// Use default implementation for `error_response()` method\nimpl error::ResponseError for MyError {}\n\nasync fn index() -> Result<&\'static str, MyError> {\n    Err(MyError { name: "test" })\n}\n// </response-error>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{web, App, HttpServer};\n\n    HttpServer::new(|| App::new().route("/", web::get().to(index)))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n'])},74116(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <override>\nuse actix_web::{\n    error, get,\n    http::{header::ContentType, StatusCode},\n    App, HttpResponse,\n};\nuse derive_more::derive::{Display, Error};\n\n#[derive(Debug, Display, Error)]\nenum MyError {\n    #[display("internal error")]\n    InternalError,\n\n    #[display("bad request")]\n    BadClientData,\n\n    #[display("timeout")]\n    Timeout,\n}\n\nimpl error::ResponseError for MyError {\n    fn error_response(&self) -> HttpResponse {\n        HttpResponse::build(self.status_code())\n            .insert_header(ContentType::html())\n            .body(self.to_string())\n    }\n\n    fn status_code(&self) -> StatusCode {\n        match *self {\n            MyError::InternalError => StatusCode::INTERNAL_SERVER_ERROR,\n            MyError::BadClientData => StatusCode::BAD_REQUEST,\n            MyError::Timeout => StatusCode::GATEWAY_TIMEOUT,\n        }\n    }\n}\n\n#[get("/")]\nasync fn index() -> Result<&\'static str, MyError> {\n    Err(MyError::BadClientData)\n}\n// </override>\n\n#[get("/e2")]\nasync fn error2() -> Result<&\'static str, MyError> {\n    Err(MyError::InternalError)\n}\n\n#[get("/e3")]\nasync fn error3() -> Result<&\'static str, MyError> {\n    Err(MyError::Timeout)\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::HttpServer;\n\n    HttpServer::new(|| App::new().service(index).service(error2).service(error3))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n'])},23988(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <recommend-one>\nuse actix_web::{\n    error, get,\n    http::{header::ContentType, StatusCode},\n    App, HttpResponse, HttpServer,\n};\nuse derive_more::derive::{Display, Error};\n\n#[derive(Debug, Display, Error)]\nenum UserError {\n    #[display("Validation error on field: {field}")]\n    ValidationError { field: String },\n}\n\nimpl error::ResponseError for UserError {\n    fn error_response(&self) -> HttpResponse {\n        HttpResponse::build(self.status_code())\n            .insert_header(ContentType::html())\n            .body(self.to_string())\n    }\n    fn status_code(&self) -> StatusCode {\n        match *self {\n            UserError::ValidationError { .. } => StatusCode::BAD_REQUEST,\n        }\n    }\n}\n// </recommend-one>\n\n#[get("/")]\nasync fn index() -> Result<&\'static str, UserError> {\n    Err(UserError::ValidationError {\n        field: "bad stuff".to_string(),\n    })\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n'])},14122(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <recommend-two>\nuse actix_web::{\n    error, get,\n    http::{header::ContentType, StatusCode},\n    App, HttpResponse, HttpServer,\n};\nuse derive_more::derive::{Display, Error};\n\n#[derive(Debug, Display, Error)]\nenum UserError {\n    #[display("An internal error occurred. Please try again later.")]\n    InternalError,\n}\n\nimpl error::ResponseError for UserError {\n    fn error_response(&self) -> HttpResponse {\n        HttpResponse::build(self.status_code())\n            .insert_header(ContentType::html())\n            .body(self.to_string())\n    }\n\n    fn status_code(&self) -> StatusCode {\n        match *self {\n            UserError::InternalError =>
1 StatusCode::INTERNAL_SERVER_ERROR,\n        }\n    }\n}\n\n#[get("/")]\nasync fn index() -> Result<&\'static str, UserError> {\n    do_thing_that_fails().map_err(|_e| UserError::InternalError)?;\n    Ok("success!")\n}\n// </recommend-two>\n\nfn do_thing_that_fails() -> Result<(), std::io::Error> {\n    Err(std::io::Error::new(std::io::ErrorKind::Other, "some error"))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n'])},21135(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "extractors"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\nserde = "1"\n'])},95509(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <form>\nuse actix_web::{post, web, App, HttpServer, Result};\nuse serde::Deserialize;\n\n#[derive(Deserialize)]\nstruct FormData {\n    username: String,\n}\n\n/// extract form data using serde\n/// this handler gets called only if the content type is *x-www-form-urlencoded*\n/// and the content of the request could be deserialized to a `FormData` struct\n#[post("/")]\nasync fn index(form: web::Form<FormData>) -> Result<String> {\n    Ok(format!("Welcome {}!", form.username))\n}\n// </form>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n'])},27636(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <form-optional>\nuse actix_web::{post, web, App, HttpServer, Result};\nuse serde::Deserialize;\n\n#[derive(Deserialize)]\nstruct FormData {\n    username: String,\n}\n\n/// accept form data when it is present and valid\n#[post("/maybe")]\nasync fn maybe(form: Option<web::Form<FormData>>) -> Result<String> {\n    let Some(form) = form else {\n        return Ok("Missing or invalid form data.".to_string());\n    };\n\n    Ok(format!("Welcome {}!", form.username))\n}\n// </form-optional>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(maybe))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n'])},35114(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <json-one>\nuse actix_web::{post, web, App, HttpServer, Result};\nuse serde::Deserialize;\n\n#[derive(Deserialize)]\nstruct Info {\n    username: String,\n}\n\n/// deserialize `Info` from request\'s body\n#[post("/submit")]\nasync fn submit(info: web::Json<Info>) -> Result<String> {\n    Ok(format!("Welcome {}!", info.username))\n}\n// </json-one>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(submit))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n'])},52464(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'#![allow(dead_code)]\n\n// <json-two>\nuse actix_web::{error, web, App, HttpResponse, HttpServer, Responder};\nuse serde::Deserialize;\n\n#[derive(Deserialize)]\nstruct Info {\n    username: String,\n}\n\n/// deserialize `Info` from request\'s body, max payload size is 4kb\nasync fn index(info: web::Json<Info>) -> impl Responder {\n    format!("Welcome {}!", info.username)\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        let json_config = web::JsonConfig::default()\n            .limit(4096)\n            .error_handler(|err, _req| {\n                // create custom error response\n                error::InternalError::from_response(err, HttpResponse::Conflict().finish())\n                    .into()\n            });\n\n        App::new().service(\n            web::resource("/")\n                // change json extractor configuration\n                .app_data(json_config)\n                .route(web::post().to(index)),\n        )\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </json-two>\n'])},84242(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use actix_web::{web, App, FromRequest, HttpRequest, HttpServer, Responder};\nuse serde::Deserialize;\n\n// pub mod custom_handler;\npub mod form;\npub mod form_optional;\npub mod json_one;\npub mod json_two;\npub mod multiple;\npub mod path_one;\npub mod path_three;\npub mod path_two;\npub mod query;\n\n#[derive(Deserialize, Debug)]\nstruct MyInfo {\n    username: String,\n    id: u32,\n}\n\n// <option-one>\nasync fn index(path: web::Path<(String, String)>, json: web::Json<MyInfo>) -> impl Responder {\n    let path = path.into_inner();\n    format!("{} {} {} {}", path.0, path.1, json.id, json.username)\n}\n// </option-one>\n\n// <option-two>\nasync fn extract(req: HttpRequest) -> impl Responder {\n    let params = web::Path::<(String, String)>::extract(&req)\n        .await\n        .unwrap()\n        .into_inner();\n\n    let info = web::Json::<MyInfo>::extract(&req)\n        .await\n        .expect("Err with reading json.");\n\n    format!("{} {} {} {}", params.0, params.1, info.username, info.id)\n}\n// </option-two>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .route("/{name}/{id}", web::post().to(index))\n            .route("/{name}/{id}/extract", web::post().to(extract))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n'])},29391(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <multi>\nuse actix_web::{get, web};\nuse serde::Deserialize;\n\n#[derive(Deserialize)]\nstruct Info {\n    username: String,\n}\n\n#[get("/users/{user_id}/{friend}")] // <- define path parameters\nasync fn index(path: web::Path<(u32, Str
1ing)>, query: web::Query<Info>) -> String {\n    let (user_id, friend) = path.into_inner();\n    format!(\n        "Welcome {}, friend {}, user_id {}!",\n        query.username, friend, user_id\n    )\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{App, HttpServer};\n\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </multi>\n'])},47639(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <path-one>\nuse actix_web::{get, web, App, HttpServer, Result};\n\n/// extract path info from "/users/{user_id}/{friend}" url\n/// {user_id} - deserializes to a u32\n/// {friend} - deserializes to a String\n#[get("/users/{user_id}/{friend}")] // <- define path parameters\nasync fn index(path: web::Path<(u32, String)>) -> Result<String> {\n    let (user_id, friend) = path.into_inner();\n    Ok(format!("Welcome {}, user_id {}!", friend, user_id))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </path-one>\n'])},4771(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use actix_web::{get, HttpRequest, Result};\n\n// <path-three>\n#[get("/users/{user_id}/{friend}")] // <- define path parameters\nasync fn index(req: HttpRequest) -> Result<String> {\n    let name: String = req.match_info().get("friend").unwrap().parse().unwrap();\n    let userid: i32 = req.match_info().query("user_id").parse().unwrap();\n\n    Ok(format!("Welcome {}, user_id {}!", name, userid))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{App, HttpServer};\n\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </path-three>\n'])},59993(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <path-two>\nuse actix_web::{get, web, Result};\nuse serde::Deserialize;\n\n#[derive(Deserialize)]\nstruct Info {\n    user_id: u32,\n    friend: String,\n}\n\n/// extract path info using serde\n#[get("/users/{user_id}/{friend}")] // <- define path parameters\nasync fn index(info: web::Path<Info>) -> Result<String> {\n    Ok(format!(\n        "Welcome {}, user_id {}!",\n        info.friend, info.user_id\n    ))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{App, HttpServer};\n\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </path-two>\n'])},72559(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <query>\nuse actix_web::{get, web, App, HttpServer};\nuse serde::Deserialize;\n\n#[derive(Deserialize)]\nstruct Info {\n    username: String,\n}\n\n// this handler gets called if the query deserializes into `Info` successfully\n// otherwise a 400 Bad Request error response is returned\n#[get("/")]\nasync fn index(info: web::Query<Info>) -> String {\n    format!("Welcome {}!", info.username)\n}\n// </query>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n'])},67141(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "flexible-responders"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\nserde = "1"\n'])},88884(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use actix_web::{web, App, HttpServer, Responder};\nuse serde::Serialize;\n\n// <flexible-responders>\n#[derive(Serialize)]\nstruct Measurement {\n    temperature: f32,\n}\n\nasync fn hello_world() -> impl Responder {\n    "Hello World!"\n}\n\nasync fn current_temperature() -> impl Responder {\n    web::Json(Measurement { temperature: 42.3 })\n}\n// </flexible-responders>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .service(web::resource("/").to(hello_world))\n            .service(web::resource("/temp").to(current_temperature))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n'])},11308(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "getting-started"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\n'])},57467(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <handlers>\nuse actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder};\n\n#[get("/")]\nasync fn hello() -> impl Responder {\n    HttpResponse::Ok().body("Hello world!")\n}\n\n#[post("/echo")]\nasync fn echo(req_body: String) -> impl Responder {\n    HttpResponse::Ok().body(req_body)\n}\n\nasync fn manual_hello() -> impl Responder {\n    HttpResponse::Ok().body("Hey there!")\n}\n// </handlers>\n\n// <main>\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .service(hello)\n            .service(echo)\n            .route("/hey", web::get().to(manual_hello))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </main>\n'])},69294(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "http2"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n# <deps>\n[dependencies]\nactix-web = { version = "4", features = ["rustls-0_23"] }\nrustls = "0.23"\nrustls-pemfile = "2"\n# </deps>\n'])},5953(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use std::{fs::File, io::BufReader};\n\n// <main>\nuse actix_web::{web, App, HttpRequest, HttpServer, Responder};\n\nasync fn index(_req: HttpRequest) -> impl Responder {\n    "Hello TLS World!"\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    rustls::crypto::aws_lc_rs::default_provider()\n        .install_default()\n        .unwrap();\n\n    let mut certs_file = BufReader::new(File::open("cert.pem").unwrap());\n    let mut key_file = BufReader::new(File::open("key.pem").unwrap());
1\n\n    // load TLS certs and key\n    // to create a self-signed temporary cert for testing:\n    // `openssl req -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365 -subj \'/CN=localhost\'`\n    let tls_certs = rustls_pemfile::certs(&mut certs_file)\n        .collect::<Result<Vec<_>, _>>()\n        .unwrap();\n    let tls_key = rustls_pemfile::pkcs8_private_keys(&mut key_file)\n        .next()\n        .unwrap()\n        .unwrap();\n\n    // set up TLS config options\n    let tls_config = rustls::ServerConfig::builder()\n        .with_no_client_auth()\n        .with_single_cert(tls_certs, rustls::pki_types::PrivateKeyDer::Pkcs8(tls_key))\n        .unwrap();\n\n    HttpServer::new(|| App::new().route("/", web::get().to(index)))\n        .bind_rustls_0_23(("127.0.0.1", 8443), tls_config)?\n        .run()\n        .await\n}\n// </main>\n'])},8768(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "main-example"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\n'])},13887(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <main-example>\nuse actix_web::{web, App, HttpRequest, HttpServer, Responder};\n\nasync fn greet(req: HttpRequest) -> impl Responder {\n    let name = req.match_info().get("name").unwrap_or("World");\n    format!("Hello {}!", &name)\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .route("/", web::get().to(greet))\n            .route("/{name}", web::get().to(greet))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </main-example>\n'])},45310(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "middleware"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-session = { version = "0.11", features = ["cookie-session"] }\nactix-web = "4"\nenv_logger = "0.11"\nfutures-util = { version = "0.3.31", default-features = false, features = ["std"] }\n'])},90802(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <default-headers>\nuse actix_web::{http::Method, middleware, web, App, HttpResponse, HttpServer};\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .wrap(middleware::DefaultHeaders::new().add(("X-Version", "0.2")))\n            .service(\n                web::resource("/test")\n                    .route(web::get().to(HttpResponse::Ok))\n                    .route(web::method(Method::HEAD).to(HttpResponse::MethodNotAllowed)),\n            )\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </default-headers>\n'])},94586(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'#![allow(dead_code)]\n\n// <error-handler>\nuse actix_web::middleware::{ErrorHandlerResponse, ErrorHandlers};\nuse actix_web::{\n    dev,\n    http::{header, StatusCode},\n    web, App, HttpResponse, HttpServer, Result,\n};\n\nfn add_error_header<B>(mut res: dev::ServiceResponse<B>) -> Result<ErrorHandlerResponse<B>> {\n    res.response_mut().headers_mut().insert(\n        header::CONTENT_TYPE,\n        header::HeaderValue::from_static("Error"),\n    );\n\n    Ok(ErrorHandlerResponse::Response(res.map_into_left_body()))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .wrap(\n                ErrorHandlers::new()\n                    .handler(StatusCode::INTERNAL_SERVER_ERROR, add_error_header),\n            )\n            .service(web::resource("/").route(web::get().to(HttpResponse::InternalServerError)))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </error-handler>\n'])},53351(e,n,t){"use strict";t.r(n);t.d(n,["default",0,"#![allow(dead_code, unused_variables)]\n\n// <from-fn>\nuse actix_web::{\n    body::MessageBody,\n    dev::{ServiceRequest, ServiceResponse},\n    middleware::{from_fn, Next},\n    App, Error,\n};\n\nasync fn my_middleware(\n    req: ServiceRequest,\n    next: Next<impl MessageBody>,\n) -> Result<ServiceResponse<impl MessageBody>, Error> {\n    // pre-processing\n    next.call(req).await\n    // post-processing\n}\n\n#[actix_web::main]\nasync fn main() {\n    let app = App::new().wrap(from_fn(my_middleware));\n}\n// </from-fn>\n"])},42380(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <logger>\nuse actix_web::middleware::Logger;\nuse env_logger::Env;\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{App, HttpServer};\n\n    env_logger::init_from_env(Env::default().default_filter_or("info"));\n\n    HttpServer::new(|| {\n        App::new()\n            .wrap(Logger::default())\n            .wrap(Logger::new("%a %{User-Agent}i"))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </logger>\n'])},2673(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'pub mod default_headers;\npub mod errorhandler;\npub mod from_fn;\npub mod logger;\npub mod user_sessions;\npub mod wrap_fn;\n\n// <simple>\nuse std::future::{ready, Ready};\n\nuse actix_web::{\n    dev::{forward_ready, Service, ServiceRequest, ServiceResponse, Transform},\n    Error,\n};\nuse futures_util::future::LocalBoxFuture;\n\n// There are two steps in middleware processing.\n// 1. Middleware initialization, middleware factory gets called with\n//    next service in chain as parameter.\n// 2. Middleware\'s call method gets called with normal request.\npub struct SayHi;\n\n// Middleware factory is `Transform` trait\n// `S` - type of the next service\n// `B` - type of response\'s body\nimpl<S, B> Transform<S, ServiceRequest> for SayHi\nwhere\n    S: Service<ServiceRequest, Response = ServiceResponse<B>, Error = Error>
1,\n    S::Future: \'static,\n    B: \'static,\n{\n    type Response = ServiceResponse<B>;\n    type Error = Error;\n    type InitError = ();\n    type Transform = SayHiMiddleware<S>;\n    type Future = Ready<Result<Self::Transform, Self::InitError>>;\n\n    fn new_transform(&self, service: S) -> Self::Future {\n        ready(Ok(SayHiMiddleware { service }))\n    }\n}\n\npub struct SayHiMiddleware<S> {\n    service: S,\n}\n\nimpl<S, B> Service<ServiceRequest> for SayHiMiddleware<S>\nwhere\n    S: Service<ServiceRequest, Response = ServiceResponse<B>, Error = Error>,\n    S::Future: \'static,\n    B: \'static,\n{\n    type Response = ServiceResponse<B>;\n    type Error = Error;\n    type Future = LocalBoxFuture<\'static, Result<Self::Response, Self::Error>>;\n\n    forward_ready!(service);\n\n    fn call(&self, req: ServiceRequest) -> Self::Future {\n        println!("Hi from start. You requested: {}", req.path());\n\n        let fut = self.service.call(req);\n\n        Box::pin(async move {\n            let res = fut.await?;\n\n            println!("Hi from response");\n            Ok(res)\n        })\n    }\n}\n// </simple>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{web, App, HttpServer};\n\n    HttpServer::new(|| {\n        App::new().wrap(SayHi).service(\n            web::resource("/").to(|| async {\n                "Hello, middleware! Check the console where the server is run."\n            }),\n        )\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n'])},77175(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'#![allow(dead_code)]\n\n// <user-session>\nuse actix_session::{Session, SessionMiddleware, storage::CookieSessionStore};\nuse actix_web::{web, App, Error, HttpResponse, HttpServer, cookie::Key};\n\nasync fn index(session: Session) -> Result<HttpResponse, Error> {\n    // access session data\n    if let Some(count) = session.get::<i32>("counter")? {\n        session.insert("counter", count + 1)?;\n    } else {\n        session.insert("counter", 1)?;\n    }\n\n    Ok(HttpResponse::Ok().body(format!(\n        "Count is {:?}!",\n        session.get::<i32>("counter")?.unwrap()\n    )))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .wrap(\n                // create cookie based session middleware\n                SessionMiddleware::builder(CookieSessionStore::default(), Key::from(&[0; 64]))\n                    .cookie_secure(false)\n                    .build()\n            )\n            .service(web::resource("/").to(index))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </user-session>\n'])},53283(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'#![allow(dead_code, unused_variables)]\n\n// <wrap-fn>\nuse actix_web::{dev::Service as _, web, App};\nuse futures_util::future::FutureExt;\n\n#[actix_web::main]\nasync fn main() {\n    let app = App::new()\n        .wrap_fn(|req, srv| {\n            println!("Hi from start. You requested: {}", req.path());\n            srv.call(req).map(|res| {\n                println!("Hi from response");\n                res\n            })\n        })\n        .route(\n            "/index.html",\n            web::get().to(|| async { "Hello, middleware!" }),\n        );\n}\n// </wrap-fn>\n'])},19886(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "powerful-extractors"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\nserde = "1"\n'])},2561(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use actix_web::{web, App, HttpResponse, HttpServer, Responder};\nuse serde::{Deserialize, Serialize};\n\n// <powerful-extractors>\n#[derive(Deserialize, Serialize)]\nstruct Event {\n    id: Option<i32>,\n    timestamp: f64,\n    kind: String,\n    tags: Vec<String>,\n}\n\nasync fn capture_event(evt: web::Json<Event>) -> impl Responder {\n    let new_event = store_in_db(evt.timestamp, &evt.kind, &evt.tags);\n    format!("got event {}", new_event.id.unwrap())\n}\n// </powerful-extractors>\n\nfn store_in_db(timestamp: f64, kind: &str, tags: &[String]) -> Event {\n    // store item in db and get new_event\n    // use id to lookup item\n    Event {\n        id: Some(1),\n        timestamp,\n        kind: kind.to_string(),\n        tags: tags.to_vec(),\n    }\n}\n\n\nasync fn index() -> HttpResponse {\n    HttpResponse::Ok()\n        .content_type("text/html; charset=utf-8")\n        .body(include_str!("../static/form.html"))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .route("/", web::get().to(index))\n            .route("/event", web::post().to(capture_event))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n'])},92895(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "request-handlers"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\n'])},39529(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <arc>\nuse actix_web::{get, web, App, HttpServer, Responder};\nuse std::{\n    cell::Cell,\n    sync::atomic::{AtomicUsize, Ordering},\n    sync::Arc,\n};\n\n#[derive(Clone)]\nstruct AppState {\n    local_count: Cell<usize>,\n    global_count: Arc<AtomicUsize>,\n}\n\n#[get("/")]\nasync fn show_count(data: web::Data<AppState>) -> impl Responder {\n    format!(\n        "global_count: {}\\nlocal_count: {}",\n        data.global_count.load(Ordering::Relaxed),\n        data.local_count.get()\n    )\n}\n\n#[get("/add")]\nasync fn add_one(data: web::Data<AppState>) -> impl Responder {\n    data.global_count.fetch_add(1, Ordering::Relaxed);\n\n    let local_count = data.local_count.get();\n    data.local_count.set(local_count + 1);\n\n    format!(\n        "global_count: {}\\nlocal_count: {}",\n        data.global_count.load(Ordering::Relaxed),\n        data.local_count.get()\n    )\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    let data = AppState {\n        local_count: Cell::new(0),\n        global_count: Arc::new(AtomicUsize::new(0)),\n    };\n\n    HttpServer::new(move || {\n        App::new()\n            .app_data(web::Data::new(data.clone()))\n            .service(show_count)\n            .service(add_one)\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </arc>\n'])},15970(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'pub mod handlers_arc;\n// <data>\nuse actix_web::{web, App, HttpServer, Responder};\nuse std::cell::Cell;\n\n#[derive(Clone)]\nstruct AppState {\n    count: Cell<usize>,\n}\n\nasync fn show_count(data: web::Data<AppState>) -> impl Responder {\n    format!("count: {}", data.count.get())\n}\n\nasync fn add_one(data: web::Data<AppState>) ->
1 impl Responder {\n    let count = data.count.get();\n    data.count.set(count + 1);\n\n    format!("count: {}", data.count.get())\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    let data = AppState {\n        count: Cell::new(0),\n    };\n\n    HttpServer::new(move || {\n        App::new()\n            .app_data(web::Data::new(data.clone()))\n            .route("/", web::to(show_count))\n            .route("/add", web::to(add_one))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </data>\n'])},80006(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "request-routing"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\n'])},58889(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <request-routing>\nuse actix_web::{get, web, App, HttpServer, Responder};\n\n#[get("/")]\nasync fn index() -> impl Responder {\n    "Hello, World!"\n}\n\n#[get("/{name}")]\nasync fn hello(name: web::Path<String>) -> impl Responder {\n    format!("Hello {}!", &name)\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(index).service(hello))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </request-routing>\n'])},25036(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "requests"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\nfutures = "0.3"\nserde = "1"\nserde_json = "1"\n'])},66619(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'pub mod manual;\npub mod multipart;\npub mod streaming;\npub mod urlencoded;\n\n// <json-request>\nuse actix_web::{web, App, HttpServer, Result};\nuse serde::Deserialize;\n\n#[derive(Deserialize)]\nstruct Info {\n    username: String,\n}\n\n/// extract `Info` using serde\nasync fn index(info: web::Json<Info>) -> Result<String> {\n    Ok(format!("Welcome {}!", info.username))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().route("/", web::post().to(index)))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </json-request>\n'])},10012(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <json-manual>\nuse actix_web::{error, post, web, App, Error, HttpResponse};\nuse futures::StreamExt;\nuse serde::{Deserialize, Serialize};\n\n#[derive(Serialize, Deserialize)]\nstruct MyObj {\n    name: String,\n    number: i32,\n}\n\nconst MAX_SIZE: usize = 262_144; // max payload size is 256k\n\n#[post("/")]\nasync fn index_manual(mut payload: web::Payload) -> Result<HttpResponse, Error> {\n    // payload is a stream of Bytes objects\n    let mut body = web::BytesMut::new();\n    while let Some(chunk) = payload.next().await {\n        let chunk = chunk?;\n        // limit max size of in-memory payload\n        if (body.len() + chunk.len()) > MAX_SIZE {\n            return Err(error::ErrorBadRequest("overflow"));\n        }\n        body.extend_from_slice(&chunk);\n    }\n\n    // body is loaded, now we can deserialize serde-json\n    let obj = serde_json::from_slice::<MyObj>(&body)?;\n    Ok(HttpResponse::Ok().json(obj)) // <- send response\n}\n// </json-manual>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::HttpServer;\n\n    HttpServer::new(|| App::new().service(index_manual))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n'])},60716(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <multipart>\n// use actix_web::{error, Error, HttpRequest, HttpResponse};\n// use futures::Future;\n\n// pub fn index(req: HttpRequest) -> Box<Future<Item = HttpResponse, Error = Error>> {\n//     // get multipart and iterate over multipart items\n//     req.multipart().and_then(|item| match item {\n//         multipart::MultipartItem::Field(field) => {\n//             println!(\n//                 "==== FIELD ==== {:?} {:?}",\n//                 field.headers(),\n//                 field.content_type()\n//             );\n//             Either::A(\n//                 field\n//                     .map(|chunk| {\n//                         println!("-- CHUNK: \\n{}", std::str::from_utf8(&chunk).unwrap());\n//                     })\n//                     .fold((), |_, _| result(Ok(()))),\n//             )\n//         }\n//         multipart::MultipartItem::Nested(mp) => Either::B(result(Ok(()))),\n//     })\n// }\n// </multipart>\n'])},43588(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <streaming>\nuse actix_web::{get, web, Error, HttpResponse};\nuse futures::StreamExt;\n\n#[get("/")]\nasync fn index(mut body: web::Payload) -> Result<HttpResponse, Error> {\n    let mut bytes = web::BytesMut::new();\n    while let Some(item) = body.next().await {\n        let item = item?;\n        println!("Chunk: {:?}", &item);\n        bytes.extend_from_slice(&item);\n    }\n\n    Ok(HttpResponse::Ok().finish())\n}\n// </streaming>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{App, HttpServer};\n\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n'])},73179(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <urlencoded>\nuse actix_web::{post, web, HttpResponse};\nuse serde::Deserialize;\n\n#[derive(Deserialize)]\nstruct FormData {\n    username: String,\n}
1\n\n#[post("/")]\nasync fn index(form: web::Form<FormData>) -> HttpResponse {\n    HttpResponse::Ok().body(format!("username: {}", form.username))\n}\n// </urlencoded>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{App, HttpServer};\n\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n'])},47327(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "responder-trait"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\nserde = "1"\nserde_json = "1"\n'])},11618(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <responder-trait>\nuse actix_web::{\n    body::BoxBody, http::header::ContentType, HttpRequest, HttpResponse, Responder,\n};\nuse serde::Serialize;\n\n#[derive(Serialize)]\nstruct MyObj {\n    name: &\'static str,\n}\n\n// Responder\nimpl Responder for MyObj {\n    type Body = BoxBody;\n\n    fn respond_to(self, _req: &HttpRequest) -> HttpResponse<Self::Body> {\n        let body = serde_json::to_string(&self).unwrap();\n\n        // Create response and set content type\n        HttpResponse::Ok()\n            .content_type(ContentType::json())\n            .body(body)\n    }\n}\n\nasync fn index() -> impl Responder {\n    MyObj { name: "user" }\n}\n// </responder-trait>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{web, App, HttpServer};\n\n    HttpServer::new(|| App::new().route("/", web::get().to(index)))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n'])},93792(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "responses"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\nfutures = "0.3"\nserde = "1"\n'])},84417(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <auto>\nuse actix_web::{get, middleware, App, HttpResponse, HttpServer};\n\n#[get("/")]\nasync fn index() -> HttpResponse {\n    HttpResponse::Ok().body("data")\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .wrap(middleware::Compress::default())\n            .service(index)\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </auto>\n'])},89192(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use std::io;\n\n// <chunked>\nuse actix_web::{get, web, App, Error, HttpRequest, HttpResponse, HttpServer};\nuse futures::future::ok;\nuse futures::stream::once;\n\n#[get("/")]\nasync fn index(_req: HttpRequest) -> HttpResponse {\n    HttpResponse::Ok().streaming(once(ok::<_, Error>(web::Bytes::from_static(b"data"))))\n}\n// </chunked>\n\n#[actix_web::main]\nasync fn main() -> io::Result<()> {\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))\n        .unwrap()\n        .run()\n        .await\n}\n'])},80496(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <identity>\nuse actix_web::{\n    get, http::header::ContentEncoding, middleware, App, HttpResponse, HttpServer,\n};\n\n#[get("/")]\nasync fn index() -> HttpResponse {\n    HttpResponse::Ok()\n        // v- disable compression\n        .insert_header(ContentEncoding::Identity)\n        .body("data")\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .wrap(middleware::Compress::default())\n            .service(index)\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </identity>\n'])},65793(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <identity-two>\nuse actix_web::{\n    get, http::header::ContentEncoding, middleware, App, HttpResponse, HttpServer,\n};\n\nstatic HELLO_WORLD: &[u8] = &[\n    0x1f, 0x8b, 0x08, 0x00, 0xa2, 0x30, 0x10, 0x5c, 0x00, 0x03, 0xcb, 0x48, 0xcd, 0xc9, 0xc9,\n    0x57, 0x28, 0xcf, 0x2f, 0xca, 0x49, 0xe1, 0x02, 0x00, 0x2d, 0x3b, 0x08, 0xaf, 0x0c, 0x00,\n    0x00, 0x00,\n];\n\n#[get("/")]\nasync fn index() -> HttpResponse {\n    HttpResponse::Ok()\n        .insert_header(ContentEncoding::Gzip)\n        .body(HELLO_WORLD)\n}\n// </identity-two>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .wrap(middleware::Compress::default())\n            .service(index)\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n'])},39953(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <json-resp>\nuse actix_web::{get, web, Responder, Result};\nuse serde::Serialize;\n\n#[derive(Serialize)]\nstruct MyObj {\n    name: String,\n}\n\n#[get("/a/{name}")]\nasync fn index(name: web::Path<String>) -> Result<impl Responder> {\n    let obj = MyObj {\n        name: name.to_string(),\n    };\n    Ok(web::Json(obj))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{App, HttpServer};\n\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </json-resp>\n'])},6271(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'pub mod auto;\npub mod chunked;\npub mod identity;\npub mod identity_two;\npub mod json_resp;\n\n// <builder>\nuse actix_web::{http::header::ContentType, HttpResponse};\n\nasync fn index() -> HttpResponse {\n    HttpResponse::Ok()\n        .content_type(ContentType::plaintext())\n        .insert_header(("X-Hdr", "sample"))\n        .body("data")\n}\n// </builder>\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{web, App, HttpServer};\n\n    HttpServer::new(|| App::new().route("/", web::get().to(index)))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n'])},99325(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "sea-orm-databases"\nversion = "0.1.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\nsea-orm = { version = "1.1.20", features = ["sqlx-sqlite", "runtime-tokio-native-tls", "macros"] }\nserde = { version = "1", features = ["derive"] }\nuuid = { version = "1", features = ["v4"] }\n'])},31452(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use std::io;\n\nuse actix_web::{error, web, App, HttpResponse, HttpServer, Responder};\nuse sea_orm::{ActiveModelTrait, Database, DatabaseConnection, Set};\nuse serde::Serialize;\nuse uuid::Uuid;\n\n// <handler>\n// Importing the existing entity modules\npub mod prelude;\npub mod users;\nuse crate::users::ActiveModel as UserActiveModel;\n\n#[derive(Debug, Serialize)]\nstruct User {\n    id: String,\n    name: String,\n}\n\nasync fn insert_new_user(\n    conn: &DatabaseConnection,\n    user_name: String,\n) -> Result<User, sea_orm::DbErr> {\n    // Create insertion model\n    let uid = Uuid::new_v4().to_string();\n    let new_user = UserActiveModel {\n        id: Set(uid.clone()),\
1n        name: Set(user_name),\n        ..Default::default()\n    };\n\n    // Insert the user\n    let user = new_user.insert(conn).await?;\n\n    Ok(User {\n        id: user.id,\n        name: user.name,\n    })\n}\n// </handler>\n\n// <main>\n#[actix_web::main]\nasync fn main() -> io::Result<()> {\n    let database_url = "sqlite:app.db";\n    let conn = Database::connect(database_url)\n        .await\n        .expect("Failed to connect to database");\n\n    HttpServer::new(move || {\n        App::new()\n            .app_data(web::Data::new(conn.clone()))\n            .route("/{name}", web::get().to(index))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </main>\n\n// <index>\nasync fn index(\n    conn: web::Data<DatabaseConnection>,\n    name: web::Path<(String,)>,\n) -> actix_web::Result<impl Responder> {\n    let (name,) = name.into_inner();\n\n    let user = insert_new_user(&conn, name)\n        .await\n        .map_err(error::ErrorInternalServerError)?;\n\n    Ok(HttpResponse::Ok().json(user))\n}\n// </index>\n'])},83261(e,n,t){"use strict";t.r(n);t.d(n,["default",0,"//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.4\n\npub mod prelude;\n\npub mod users;\n"])},96092(e,n,t){"use strict";t.r(n);t.d(n,["default",0,"//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.4\n\npub use super::users::Entity as Users;\n"])},14193(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.4\n\nuse sea_orm::entity::prelude::*;\n\n#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]\n#[sea_orm(table_name = "users")]\npub struct Model {\n    #[sea_orm(primary_key, auto_increment = false)]\n    pub id: String,\n    pub name: String,\n}\n\n#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]\npub enum Relation {}\n\nimpl ActiveModelBehavior for ActiveModel {}\n'])},98697(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "server"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = { version = "4", features = ["openssl"] }\nopenssl = "0.10"\ntokio = { version = "1", features = ["full"] }\n'])},33578(e,n,t){"use strict";t.r(n);t.d(n,["default",0,"use actix_web::{\n    body::MessageBody,\n    dev::{ServiceFactory, ServiceRequest, ServiceResponse},\n    App, Error,\n};\n\n#[allow(dead_code)]\nfn app() -> App<\n    impl ServiceFactory<\n        ServiceRequest,\n        Response = ServiceResponse<impl MessageBody>,\n        Config = (),\n        InitError = (),\n        Error = Error,\n    >,\n> {\n    App::new()\n}\n\n// <keep-alive>\nuse actix_web::{http::KeepAlive, HttpServer};\nuse std::time::Duration;\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    // Set keep-alive to 75 seconds\n    let _one = HttpServer::new(app).keep_alive(Duration::from_secs(75));\n\n    // Use OS's keep-alive (usually quite long)\n    let _two = HttpServer::new(app).keep_alive(KeepAlive::Os);\n\n    // Disable keep-alive\n    let _three = HttpServer::new(app).keep_alive(None);\n\n    Ok(())\n}\n// </keep-alive>\n"])},83921(e,n,t){"use strict";t.r(n);t.d(n,["default",0,"#![allow(dead_code)]\n\n// <example>\nuse actix_web::{http, HttpRequest, HttpResponse};\n\nasync fn index(_req: HttpRequest) -> HttpResponse {\n    let mut resp = HttpResponse::Ok()\n        .force_close() // <- Close connection on HttpResponseBu
1ilder\n        .finish();\n\n    // Alternatively close connection on the HttpResponse struct\n    resp.head_mut().set_connection_type(http::ConnectionType::Close);\n\n    resp\n}\n// </example>\n\n// ConnectionType::Close\n// ConnectionType::KeepAlive\n// ConnectionType::Upgrade\n"])},21048(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'pub mod keep_alive;\npub mod keep_alive_tp;\npub mod signals;\npub mod ssl;\npub mod workers;\n\n// <main>\nuse actix_web::{web, App, HttpResponse, HttpServer};\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().route("/", web::get().to(HttpResponse::Ok)))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </main>\n'])},53936(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <signals>\nuse actix_web::{web, App, HttpResponse, HttpServer};\nuse std::io;\n\n#[tokio::main]\nasync fn main() -> io::Result<()> {\n    let srv = HttpServer::new(|| App::new().route("/", web::get().to(HttpResponse::Ok)))\n        .bind(("127.0.0.1", 8080))?\n        .shutdown_timeout(60) // <- Set shutdown timeout to 60 seconds\n        .run();\n\n    // obtain handle to server\n    let srv_handle = srv.handle();\n\n    // spawn server as Tokio task to start processing connections\n    tokio::spawn(srv);\n\n    // pause accepting new connections\n    srv_handle.pause().await;\n\n    // resume accepting new connections\n    srv_handle.resume().await;\n\n    // stop server gracefully\n    srv_handle.stop(true).await;\n\n    Ok(())\n}\n// </signals>\n\n#[allow(dead_code)]\nfn run_main() {\n    let _ = main();\n}\n'])},48435(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'#![allow(dead_code)]\n\n// <ssl>\nuse actix_web::{get, App, HttpRequest, HttpServer, Responder};\nuse openssl::ssl::{SslAcceptor, SslFiletype, SslMethod};\n\n#[get("/")]\nasync fn index(_req: HttpRequest) -> impl Responder {\n    "Welcome!"\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    // load TLS keys\n    // to create a self-signed temporary cert for testing:\n    // `openssl req -x509 -newkey rsa:4096 -nodes -keyout key.pem -out cert.pem -days 365 -subj \'/CN=localhost\'`\n    let mut builder = SslAcceptor::mozilla_intermediate(SslMethod::tls()).unwrap();\n    builder\n        .set_private_key_file("key.pem", SslFiletype::PEM)\n        .unwrap();\n    builder.set_certificate_chain_file("cert.pem").unwrap();\n\n    HttpServer::new(|| App::new().service(index))\n        .bind_openssl("127.0.0.1:8080", builder)?\n        .run()\n        .await\n}\n// </ssl>\n'])},17686(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <workers>\nuse actix_web::{web, App, HttpResponse, HttpServer};\n\n#[actix_web::main]\nasync fn main() {\n    let _ = HttpServer::new(|| App::new().route("/", web::get().to(HttpResponse::Ok))).workers(4);\n    // <- Start 4 workers\n}\n// </workers>\n'])},59358(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "static-files"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\nactix-files = "0.7"\n'])},49148(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <config-one>\nuse actix_files as fs;\nuse actix_web::http::header::{ContentDisposition, DispositionType};\nuse actix_web::{get, App, Error, HttpRequest, HttpServer};\n\n#[get("/{filename:.*}")]\nasync fn index(req: HttpRequest) -> Result<fs::NamedFile, Error> {\n    let path: std::path::PathBuf = req.match_info().query("filename").parse().unwrap();\n    let file = fs::NamedFile::open(path)?;\n    Ok(file\n        .use_last_modified(true)\n        .set_content_disposition(ContentDisposition {\n            disposition: DispositionType::Attachment,\n            parameters: vec![],\n        }))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </config-one>\n'])},20125(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <config-two>\nuse actix_files as fs;\nuse actix_web::{App, HttpServer};\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new().service(\n            fs::Files::new("/static", ".")\n                .show_files_listing()\n                .use_last_modified(true),\n        )\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </config-two>\n'])},49553(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <directory>\nuse actix_files as fs;\nuse actix_web::{App, HttpServer};\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(fs::Files::new("/static", ".").show_files_listing()))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </directory>\n'])},14449(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'pub mod configuration;\npub mod configuration_two;\npub mod directory;\n\n// <individual-file>\nuse actix_files::NamedFile;\nuse actix_web::HttpRequest;\nuse std::path::PathBuf;\n\nasync fn index(req: HttpRequest) -> actix_web::Result<NamedFile> {\n    let path: PathBuf = req.match_info().query("filename").parse().unwrap();\n    Ok(NamedFile::open(path)?)\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{web, App, HttpServer};\n\n    HttpServer::new(|| App::new().route("/{filename:.*}", web::get().to(index)))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </individual-file>\n'])},32736(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "testing"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\nfutures = "0.3"\nserde = "1"\n'])},85233(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use actix_web::{get, HttpRequest, Responder};\n\n#[allow(dead_code)]\n#[get("/")]\nasync fn index(_req: HttpRequest) -> impl Responder {\n    "Hello world!"\n}\n\n// <integration-one>\n#[cfg(test)]\nmod tests {\n    use actix_web::{http::header::ContentType, test, App};\n\n    use super::*;\n\n    #[actix_web::test]\n    async fn test_index_get() {\n        let app = test::init_service(App::new().service(index)).await;\n        let req = test::TestRequest::default()\n            .insert_header(ContentType::plaintext())\n            .to_request();\n        let resp = test::call_service(&app, req).await;\n        assert!(resp.status().is_success());\n    }\n\n    #[actix_web::test]\n    async fn test_index_post() {\n        let app = test::init_service(App::new().service(index)).await;\n        let req = test::TestRequest::post().uri("/").to_request();\n        let resp = test::call_service(&app, req).await;\n        assert!(resp.status().is_client_error());\n    }\n}\n// </integration-one>\n'])},41635(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use actix_web::{get, web, HttpResponse, Responder};\nuse serde::{Deserialize, Serialize};\n\n#[derive(Deserialize, Serialize, Debug)]\nstruct AppState {\n    count: i32,\n}\n\n#[allow(dead_code)]\n#[get("/")]\nasync fn index(data: web::Data<AppState>) -> impl Responder {\n    HttpResponse::Ok().json(data.get_ref())\n}\n\n// <integration-two>\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use actix_web::{test, web, App};\n\n    #[actix_web::test]\n    async fn test_index_get() {\n        let app = test::init_service(\n            App::new()\n                .app_data(web::Data::new(AppState { count: 4 }))\n                .service(index),\n        )\n        .await;\n        let req = test::TestRequest::get().uri("/").to_request();\n        let resp: AppState = test::call_and_read_body_json(&app, req).await;\n\n        assert_eq!(resp.count, 4);\n    }\n}\n// </integration-two>\n'])},2367(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'pub mod integration_one;\npub mod integration_two;\npub mod stream_response;\nuse actix_web::{http, web, App, HttpRequest, HttpResponse};\n\nasync fn index(req: HttpRequest) -> HttpResponse {\n    if let Some(hdr) = req.headers().get(http::header::CONTENT_TYPE) {\n        if let Ok(_s) = hdr.to_str() {\n            return HttpResponse::Ok().into();\n        }\n    }\n    HttpResponse::BadRequest().into()\n}\n\nfn main() {\n    App::new().route("/", web::get().to(index));\n}\n\n// <unit-tests>\n#[cfg(test)]\nmod tests {\n    use super::*;\n    use actix_web::{\n        http::{self, header::ContentType},\n        test,\n    };
1\n\n    #[actix_web::test]\n    async fn test_index_ok() {\n        let req = test::TestRequest::default()\n            .insert_header(ContentType::plaintext())\n            .to_http_request();\n        let resp = index(req).await;\n        assert_eq!(resp.status(), http::StatusCode::OK);\n    }\n\n    #[actix_web::test]\n    async fn test_index_not_ok() {\n        let req = test::TestRequest::default().to_http_request();\n        let resp = index(req).await;\n        assert_eq!(resp.status(), http::StatusCode::BAD_REQUEST);\n    }\n}\n// </unit-tests>\n'])},72810(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <stream-response>\nuse std::task::Poll;\n\nuse actix_web::{\n    http::{self, header::ContentEncoding, StatusCode},\n    web, App, Error, HttpRequest, HttpResponse,\n};\nuse futures::stream;\n\nasync fn sse(_req: HttpRequest) -> HttpResponse {\n    let mut counter: usize = 5;\n\n    // yields `data: N` where N in [5; 1]\n    let server_events =\n        stream::poll_fn(move |_cx| -> Poll<Option<Result<web::Bytes, Error>>> {\n            if counter == 0 {\n                return Poll::Ready(None);\n            }\n            let payload = format!("data: {}\\n\\n", counter);\n            counter -= 1;\n            Poll::Ready(Some(Ok(web::Bytes::from(payload))))\n        });\n\n    HttpResponse::build(StatusCode::OK)\n        .insert_header((http::header::CONTENT_TYPE, "text/event-stream"))\n        .insert_header(ContentEncoding::Identity)\n        .streaming(server_events)\n}\n\npub fn main() {\n    App::new().route("/", web::get().to(sse));\n}\n\n#[cfg(test)]\nmod tests {\n    use super::*;\n\n    use actix_web::{body, body::MessageBody as _, rt::pin, test, web, App};\n    use futures::future;\n\n    #[actix_web::test]\n    async fn test_stream_chunk() {\n        let app = test::init_service(App::new().route("/", web::get().to(sse))).await;\n        let req = test::TestRequest::get().to_request();\n\n        let resp = test::call_service(&app, req).await;\n        assert!(resp.status().is_success());\n\n        let body = resp.into_body();\n        pin!(body);\n\n        // first chunk\n        let bytes = future::poll_fn(|cx| body.as_mut().poll_next(cx)).await;\n        assert_eq!(\n            bytes.unwrap().unwrap(),\n            web::Bytes::from_static(b"data: 5\\n\\n")\n        );\n\n        // second chunk\n        let bytes = future::poll_fn(|cx| body.as_mut().poll_next(cx)).await;\n        assert_eq!(\n            bytes.unwrap().unwrap(),\n            web::Bytes::from_static(b"data: 4\\n\\n")\n        );\n\n        // remaining part\n        for i in 0..3 {\n            let expected_data = format!("data: {}\\n\\n", 3 - i);\n            let bytes = future::poll_fn(|cx| body.as_mut().poll_next(cx)).await;\n            assert_eq!(bytes.unwrap().unwrap(), web::Bytes::from(expected_data));\n        }\n    }\n\n    #[actix_web::test]\n    async fn test_stream_full_payload() {\n        let app = test::init_service(App::new().route("/", web::get().to(sse))).await;\n        let req = test::TestRequest::get().to_request();\n\n        let resp = test::call_service(&app, req).await;\n        assert!(resp.status().is_success());\n\n        let body = resp.into_body();\n        let bytes = body::to_bytes(body).await;\n        assert_eq!(\n            bytes.unwrap(),\n            web::Bytes::from_static(b"data: 5\\n\\ndata: 4\\n\\ndata: 3\\n\\ndata: 2\\n\\ndata: 1\\n\\n")\n        );\n    }\n}\n// </stream-response>\n'])},584(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "url-dispatch"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\nserde = "1"\n'])},25730(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use actix_web::{guard, web, App, HttpResponse};\n\n#[rustfmt::skip]\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::HttpServer;\n\n    HttpServer::new(|| {\n// <cfg>\nApp::new().service(\n    web::resource("/path").route(\n        web::route()\n            .guard(guard::Get())\n            .guard(guard::Header("content-type", "text/plain"))\n            .to(HttpResponse::Ok),\n    ),\n)\n// </cfg>\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n'])},49454(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use actix_web::{guard, web, App, HttpRequest, HttpResponse, HttpServer, Responder};\n\n#[allow(dead_code)]\nasync fn index(_req: HttpRequest) -> impl Responder {\n    "Welcome!"\n}\n\n// <default>\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .service(web::resource("/").route(web::get().to(index)))\n            .default_service(\n                web::route()\n                    .guard(guard::Not(guard::Get()))\n                    .to(HttpResponse::MethodNotAllowed),\n            )\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </default>\n'])},37385(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'#![allow(dead_code)] // false positive on ContentTypeHeader\n\n// <guard>\nuse actix_web::{\n    guard::{Guard, GuardContext},\n    http, HttpResponse,\n};\n\nstruct ContentTypeHeader;\n\nimpl Guard for ContentTypeHeader {\n    fn check(&self, req: &GuardContext) -> bool {\n        req.head()\n            .headers()\n            .contains_key(http::header::CONTENT_TYPE)\n    }\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{web, App, HttpServer};\n\n    HttpServer::new(|| {\n        App::new().route(\n            "/",\n            web::route().guard(ContentTypeHeader).to(HttpResponse::Ok),\n        )\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </guard>\n'])}
1,64339(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <guard2>\nuse actix_web::{guard, web, App, HttpResponse, HttpServer};\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new().route(\n            "/",\n            web::route()\n                .guard(guard::Not(guard::Get()))\n                .to(HttpResponse::MethodNotAllowed),\n        )\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </guard2>\n'])},96599(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'pub mod cfg;\npub mod dhandler;\npub mod guard;\npub mod guard2;\npub mod minfo;\npub mod norm;\npub mod norm2;\npub mod path;\npub mod path2;\npub mod resource;\npub mod scope;\npub mod url_ext;\npub mod urls;\n\n// <main>\nuse actix_web::{web, App, HttpResponse, HttpServer};\n\nasync fn index() -> HttpResponse {\n    HttpResponse::Ok().body("Hello")\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .route("/", web::get().to(index))\n            .route("/user", web::post().to(index))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </main>\n'])},43171(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <minfo>\nuse actix_web::{get, App, HttpRequest, HttpServer, Result};\n\n#[get("/a/{v1}/{v2}/")]\nasync fn index(req: HttpRequest) -> Result<String> {\n    let v1: u8 = req.match_info().get("v1").unwrap().parse().unwrap();\n    let v2: u8 = req.match_info().query("v2").parse().unwrap();\n    let (v3, v4): (u8, u8) = req.match_info().load().unwrap();\n    Ok(format!("Values {} {} {} {}", v1, v2, v3, v4))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </minfo>\n'])},5412(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'#![allow(dead_code)]\n\n// <norm>\nuse actix_web::{middleware, HttpResponse};\n\nasync fn index() -> HttpResponse {\n    HttpResponse::Ok().body("Hello")\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{web, App, HttpServer};\n\n    HttpServer::new(|| {\n        App::new()\n            .wrap(middleware::NormalizePath::default())\n            .route("/resource/", web::to(index))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </norm>\n'])},48116(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use actix_web::HttpResponse;\n\n#[get("/resource/")]\nasync fn index() -> HttpResponse {\n    HttpResponse::Ok().body("Hello")\n}\n\n// <norm>\nuse actix_web::{get, http::Method, middleware, web, App, HttpServer};\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .wrap(middleware::NormalizePath::default())\n            .service(index)\n            .default_service(web::route().method(Method::GET))\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </norm>\n'])},16713(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <path>\nuse actix_web::{get, web, App, HttpServer, Result};\n\n#[get("/{username}/{id}/index.html")] // <- define path parameters\nasync fn index(info: web::Path<(String, u32)>) -> Result<String> {\n    let info = info.into_inner();\n    Ok(format!("Welcome {}! id: {}", info.0, info.1))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </path>\n'])},31123(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <path>\nuse actix_web::{get, web, App, HttpServer, Result};\nuse serde::Deserialize;\n\n#[derive(Deserialize)]\nstruct Info {\n    username: String,\n}\n\n// extract path info using serde\n#[get("/{username}/index.html")] // <- define path parameters\nasync fn index(info: web::Path<Info>) -> Result<String> {\n    Ok(format!("Welcome {}!", info.username))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(index))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </path>\n'])},97103(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <pbuf>
1\nuse actix_web::{get, App, HttpRequest, HttpServer, Result};\nuse std::path::PathBuf;\n\n#[get("/a/{tail:.*}")]\nasync fn index(req: HttpRequest) -> Result<String> {\n    let path: PathBuf = req.match_info().query("tail").parse().unwrap();\n    Ok(format!("Path {:?}", path))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().service(index))\n        .bind("127.0.0.1:8080")?\n        .run()\n        .await\n}\n// </pbuf>\n'])},63046(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <resource>\nuse actix_web::{guard, web, App, HttpResponse};\n\nasync fn index() -> HttpResponse {\n    HttpResponse::Ok().body("Hello")\n}\n\npub fn main() {\n    App::new()\n        .service(web::resource("/prefix").to(index))\n        .service(\n            web::resource("/user/{name}")\n                .name("user_detail")\n                .guard(guard::Header("content-type", "application/json"))\n                .route(web::get().to(HttpResponse::Ok))\n                .route(web::put().to(HttpResponse::Ok)),\n        );\n}\n// </resource>\n'])},36408(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'use actix_web::{get, web, App, HttpResponse, HttpServer};\n\n// <scope>\n#[get("/show")]\nasync fn show_users() -> HttpResponse {\n    HttpResponse::Ok().body("Show users")\n}\n\n#[get("/show/{id}")]\nasync fn user_detail(path: web::Path<(u32,)>) -> HttpResponse {\n    HttpResponse::Ok().body(format!("User detail: {}", path.into_inner().0))\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new().service(\n            web::scope("/users")\n                .service(show_users)\n                .service(user_detail),\n        )\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </scope>\n'])},17401(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <ext>\nuse actix_web::{get, App, HttpRequest, HttpServer, Responder};\n\n#[get("/")]\nasync fn index(req: HttpRequest) -> impl Responder {\n    let url = req.url_for("youtube", ["oHg5SJYRHA0"]).unwrap();\n    assert_eq!(url.as_str(), "https://youtube.com/watch/oHg5SJYRHA0");\n\n    url.to_string()\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| {\n        App::new()\n            .service(index)\n            .external_resource("youtube", "https://youtube.com/watch/{video_id}")\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </ext>\n'])},43652(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <url>\nuse actix_web::{get, guard, http::header, HttpRequest, HttpResponse, Result};\n\n#[get("/test/")]\nasync fn index(req: HttpRequest) -> Result<HttpResponse> {\n    let url = req.url_for("foo", ["1", "2", "3"])?; // <- generate url for "foo" resource\n\n    Ok(HttpResponse::Found()\n        .insert_header((header::LOCATION, url.as_str()))\n        .finish())\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    use actix_web::{web, App, HttpServer};\n\n    HttpServer::new(|| {\n        App::new()\n            .service(\n                web::resource("/test/{a}/{b}/{c}")\n                    .name("foo") // <- set resource name, then it could be used in `url_for`\n                    .guard(guard::Get())\n                    .to(HttpResponse::Ok),\n            )\n            .service(index)\n    })\n    .bind(("127.0.0.1", 8080))?\n    .run()\n    .await\n}\n// </url>\n'])},41894(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'[package]\nname = "websockets"\nversion = "1.0.0"\npublish = false\nedition.workspace = true\n\n[dependencies]\nactix-web = "4"\nactix-ws = "0.4"\nfutures-util = { version = "0.3.31", default-features = false, features = ["std"] }\n'])},32553(e,n,t){"use strict";t.r(n);t.d(n,["default",0,'// <websockets>\nuse actix_web::{rt, web, App, Error, HttpRequest, HttpResponse, HttpServer};\nuse actix_ws::AggregatedMessage;\nuse futures_util::StreamExt as _;\n\nasync fn echo(req: HttpRequest, stream: web::Payload) -> Result<HttpResponse, Error> {\n    let (res, mut session, stream) = actix_ws::handle(&req, stream)?;\n\n    let mut stream = stream\n        .aggregate_continuations()\n        // aggregate continuation frames up to 1MiB\n        .max_continuation_size(2_usize.pow(20));\n\n    // start task but don\'t wait for it\n    rt::spawn(async move {\n        // receive messages from websocket\n        while let Some(msg) = stream.next().await {\n            match msg {\n                Ok(AggregatedMessage::Text(text)) =>
1 {\n                    // echo text message\n                    session.text(text).await.unwrap();\n                }\n\n                Ok(AggregatedMessage::Binary(bin)) => {\n                    // echo binary message\n                    session.binary(bin).await.unwrap();\n                }\n\n                Ok(AggregatedMessage::Ping(msg)) => {\n                    // respond to PING frame with PONG frame\n                    session.pong(&msg).await.unwrap();\n                }\n\n                _ => {}\n            }\n        }\n    });\n\n    // respond immediately with response connected to WS session\n    Ok(res)\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    HttpServer::new(|| App::new().route("/echo", web::get().to(echo)))\n        .bind(("127.0.0.1", 8080))?\n        .run()\n        .await\n}\n// </websockets>\n\n// testing requires specific headers:\n// Upgrade: websocket\n// Connection: Upgrade\n// Sec-WebSocket-Key: SOME_KEY\n// Sec-WebSocket-Version: 13\n'])}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.