1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
#![doc(test(no_crate_inject))] /*! # actix-web static files as resources support ## Legal Dual-licensed under `MIT` or the [UNLICENSE](http://unlicense.org/). ## Features - Embed static resources in end binary - Serve static resources as directory in `actix-web` - Install package manager (npm) dependincies ## Usage ### Use-case #1: Static resources folder Create folder with static resources in your project (for example `static`): ```bash cd project_dir mkdir static echo "Hello, world" > static/hello ``` Add to `Cargo.toml` dependency to `actix-web-static-files`: ```toml [dependencies] actix-web-static-files = "0.2" [build-dependencies] actix-web-static-files = "0.2" ``` Add build script to `Cargo.toml`: ```toml [package] build = "build.rs" ``` Add `build.rs` with call to bundle resources: ```rust#ignore use actix_web_static_files::resource_dir; fn main() { resource_dir("./static").build().unwrap(); } ``` Include generated code in `main.rs`: ```rust#ignore use actix_web::{App, HttpServer}; use actix_web_static_files; use std::collections::HashMap; include!(concat!(env!("OUT_DIR"), "/generated.rs")); fn main() { HttpServer::new(move || { let generated = generate(); App::new() .service(actix_web_static_files::ResourceFiles::new( "/static", generated, )) }) .bind("127.0.0.1:8080").unwrap() .run().unwrap(); } ``` Run the server: ```bash cargo run ``` Request the resource: ```bash $ curl -v http://localhost:8080/static/hello * Trying 127.0.0.1:8080... * TCP_NODELAY set * Connected to localhost (127.0.0.1) port 8080 (#0) > GET /static/hello HTTP/1.1 > Host: localhost:8080 > User-Agent: curl/7.65.3 > * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < content-length: 13 < date: Tue, 06 Aug 2019 13:36:50 GMT < Hello, world * Connection #0 to host localhost left intact ``` ### Use-case #2: package.json - npm managed folder Create folder with static resources in your project (for example `static`): ```bash cd project_dir mkdir static_packages cd static_packages echo '{}' > package.json # install your npm dependencies (here we use fontawesome as an example) npm install --save-dev @fortawesome/fontawesome-free ``` Add generated folder to ignore file of your version control system (here: git): ```bash cd project_dir echo "static_packages/node_modules" >> .gitignore ``` Add `dependencies` and `build-dependencies` in `Cargo.toml` same way as in the first use-case. Add `build.rs` with call to bundle resources: ```rust#ignore use actix_web_static_files::npm_resource_dir; fn main() { npm_resource_dir("./static_packages").unwrap().build().unwrap(); } ``` Include generated code in `main.rs` same way as in the first use-case. Reference resources in your `HTML`: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="stylesheet" href="/static/@fortawesome/fontawesome-free/css/all.css"> <script defer src="/static/@fortawesome/fontawesome-free/js/all.js"></script> <title>Hi</title> </head> <body> <i class="fas fa-thumbs-up"></i> </body> </html> ``` */ include!("impl.rs");