rocket/fs/mod.rs
1//! File serving, file accepting, and file metadata types.
2
3mod server;
4mod named_file;
5mod temp_file;
6mod file_name;
7
8pub mod rewrite;
9
10pub use server::*;
11pub use named_file::*;
12pub use temp_file::*;
13pub use file_name::*;
14
15crate::export! {
16 /// Generates a crate-relative version of a path.
17 ///
18 /// This macro is primarily intended for use with [`FileServer`] to serve
19 /// files from a path relative to the crate root.
20 ///
21 /// The macro accepts one parameter, `$path`, an absolute or (preferably)
22 /// relative path. It returns a path as an `&'static str` prefixed with the
23 /// path to the crate root. Use `Path::new(relative!($path))` to retrieve an
24 /// `&'static Path`.
25 ///
26 /// # Example
27 ///
28 /// Serve files from the crate-relative `static/` directory:
29 ///
30 /// ```rust
31 /// # #[macro_use] extern crate rocket;
32 /// use rocket::fs::{FileServer, relative};
33 ///
34 /// #[launch]
35 /// fn rocket() -> _ {
36 /// rocket::build().mount("/", FileServer::new(relative!("static")))
37 /// }
38 /// ```
39 ///
40 /// Path equivalences:
41 ///
42 /// ```rust
43 /// use std::path::Path;
44 ///
45 /// use rocket::fs::relative;
46 ///
47 /// let manual = Path::new(env!("CARGO_MANIFEST_DIR")).join("static");
48 /// let automatic_1 = Path::new(relative!("static"));
49 /// let automatic_2 = Path::new(relative!("/static"));
50 /// assert_eq!(manual, automatic_1);
51 /// assert_eq!(automatic_1, automatic_2);
52 /// ```
53 ///
54 macro_rules! relative {
55 ($path:expr) => {
56 if cfg!(windows) {
57 concat!(env!("CARGO_MANIFEST_DIR"), "\\", $path)
58 } else {
59 concat!(env!("CARGO_MANIFEST_DIR"), "/", $path)
60 }
61 };
62 }
63}